存储数据用文件就可以了,为什么要数据库呢?
首先,文件保存数据有以下几个缺点:
数据库存储的介质:
为解决上述问题,专家们设计出更加利于管理数据的东西-数据库,能更加有效的管理数据,数据库的水平是衡量一个程序员水平的重要指标
CentOS 6.5下编译安装MySQL 5.6.14_野马红尘的技术博客_51CTO博客
https://zhuanlan.zhihu.com/p/49046496
Windows下通过MySQL Installer安装MySQL服务_野马红尘的技术博客_51CTO博客
ubuntu 安装 MySql_ubuntu安装mysql-CSDN博客
mysql -h 127.0.0.1 -P 3306 -u root -p
注意:
所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。数据库服务器、数据库和表的关系如下:
创建数据库
create database helloworld;
使用数据库
use helloworld;
创建表
create table student(
id int,
name varchar(32),
gender varchar(2)
);
表中插入数据
insert into student (id, name, gender) values (1, '张三', '男');
insert into student (id, name, gender) values (2, '李四', '女');
insert into student (id, name, gender) values (3, '王五', '男');
查询表中的数据
select * from student;
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性
存储引擎是数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法
MySQL的核心就是插件式存储引擎,支持多种存储引擎
show engines;
语法:
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
说明:
创建名为db1的数据库
show variables like 'character_set_database';
show variables like 'collation_database';
show charset;
字符集主要是控制用什么语言。比如utf8就可以使用中文
show collation;
创建一个数据库,校验规则使用utf8_ general_ ci/utf8mb4_0900_ai_ci[不区分大小写]
create database test1 collate utf8_general_ci;
use test1;
create table person(name varchar(20));
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
创建一个数据库,校验规则使用utf8_ bin[区分大小写]
create database test2 collate utf8_bin;
use test2;
create table person(name varchar(20));
insert into person values('a');
insert into person values('A');
insert into person values('b');
insert into person values('B');
show databases;
show create database 数据库名;
说明:
语法:
ALTER DATABASE db_name
[alter_spacification [,alter_spacification]...]
alter_spacification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
说明:
DROP DATABASE [IF EXISTS] db_ name;
执行删除之后的结果:
注意:不要随意删除数据库
mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
可以打开看看 .sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句
都装载这个文件中
mysql> source /home/dc/mysql_test1/test1.sql;
如果备份的不是整个数据库,而是其中的一张表,怎么做?
mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql
同时备份多个数据库
mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
如果备份一个数据库时,没有带上 -B 参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source 来还原
语法:
show processlist;
可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况
语法:
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎
说明:
create table users (
id int,
name varchar(20) comment '用户名',
password char(32) comment '密码是32位的md5值',
birthday date comment '生日'
) character set utf8 engine MyISAM;
说明:
desc 表名;
在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表
ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,columndatatype]...);
ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,columndatatype]...);
ALTER TABLE tablename DROP (column);
案例:
mysql> insert into users values(1,'a','b','1982-01-04'),(2,'b','c','1984-01-04');
mysql> alter table users add assets varchar(100) comment '图片路径' after birthday;
mysql> alter table users modify name varchar(60);
注意:删除字段一定要小心,删除字段及其对应的列数据都没了
mysql> alter table users drop password;
mysql> alter table users rename to employee;
to:可以省掉
mysql> alter table employee change name xingming varchar(60);
--新字段需要完整定义
语法格式:
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
示例:
drop table t1;
数值越界测试:
说明:
注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型
基本语法:
bit[(M)] : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。
举例:
语法:
float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节
案例:
小数:float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入
如果定义的是float(4,2) unsigned 这时,因为把它指定为无符号的数,范围是 0 ~ 99.99
语法:
decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数
说明:float表示的精度大约是7位。
建议:如果希望小数的精度高,推荐使用decimal
语法:
char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255
案例(char):
说明:
语法:
varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节
案例:
关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:
如何选择定长或变长字符串?
常用的日期有如下三个:
案例:
更新数据
语法:
该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,....最多65535个;当我们添加枚举值时,也可以添加对应的数字编号
该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,.... 最多64个
案例:
有一个调查表votes,需要调查人的喜好, 比如(登山,游泳,篮球,武术)中去选择(可以多选),(男,女)[单选]
集合查询使用find_ in_ set函数: