一、存储引擎
存储引擎:负责将不同类型的数据分别用不同的存储方式进行存储
MySQL主要引擎有:Innodb、myisam、memory、Blackhole
1.1、innodb
是MySQL5.5版本之后默认的存储引擎
存储数据更加安全
1.2、myisam
MySQL5.5版本之前默认的存储引擎
速度比innodb快,但是我们需要更加注重数据的安全
1.3、memory
内存引擎(数据全部存放在内存中),断电数据就会直接消失
1.4、Blackhole
黑洞引擎,不管存什么都会消失
1.5、查看所有引擎
show engines
1.6、不同引擎在存储表中的不同点
create table t1(id int)engine=innodb;
create table t2(id int)engine=myisam;
create table t3(id int)engine=memory;
create table t4 (id int)engine=Blackhole;
1.7、存数据
insert table t1 values(1);
insert table t2 values(2);
insert table t3 values(3);
insert table t4 values(4);
二、创建表的完整语法
2.1、创建表的语法
create table 表名(
字段名1 类型(宽度)约束条件,
字段名2 类型(宽度)约束条件
字段名3 类型(宽度)约束条件)
2.2、创建表的要求
1.在同一张表中字段名不能重复
2.宽度和约束条件是可选的,可写可不写,字段名和字段类型是必须要写的
3.同一个字段名可以携带多个约束条件,中间使用空格间隔开
4.最后一行不能有逗号,否则会报错
2.3、创建表中的宽度
宽度:一般情况下指的是对存储数据的限制,
默认情况下为1,存数据时只会为一个字节,当存的数据为null时,等同于空
create table t1 (name char);
insert into t1 values(null);关键字null
MySQL5.6版本默认没有开启严格模式,规定只能存一个字符,如果给了多个字符,就会直接取截,剩下一个
MySQL5.7版本之后开启严格模式,一旦超过规定字符就会直接报错
使用数据库的原则:
能尽量少给数据库干活,就不要给数据库加活
2.4、约束条件
约束条件:null
not null 不能插入null
create table t1(id int,name char not null);
2.5、宽度和约束条件的关系
宽度是用来限制数据的储存
约束条件是在宽度的基础上添加而外的约束
三、严格模式
3.1、怎么查看严格模式
show variables like “%mode”;
3.2、模糊匹配/查询
关键字 like
%:匹配任意多个字符
_:匹配任意单个字符
3.3、修改严格模式
set session 只在当前窗口有效
set global 全局有效
get global sql_mode = ‘STRICT_TRANS_TABLES’;
修改以后需要重新进入服务端
三、基础数据类型
3.1、整型
整型分为tinyint、smallint、meduimint、int、nigint
我们可以根据对应的类型以及数值,添加到表中,测得对应的范围
create table t1(id tinyint);
insert into t1 values(-129),(256);
3.2、约束条件之无符号 unsigned
create table t1(id tinyint unsigned)
整型默认情况下都是带符号的
3.3、整型中的宽度
create table t1(id int(8));
insert into t1 values(123456789);
整型中的宽度不是用来限制位数的,当小于宽度,会自动使用0进行补充,
只要添加的数值在该整型的类型范围内,有几位就会显示几位
四、浮点型
浮点型分为float、double、decimal
4.1、浮点型的精度验证
精度:float《double《decimal
create table t1(id float(255,30)); #一共255位数,其中30位为小数点后数字 create table t2(id double(255,30)); create table t3(id decimal(65,30)); #添加 insert into t1 values(1.111111111111111111111); insert into t2 values(1.111111111111111111111); insert into t3 values(1.111111111111111111111);
五、字符类型
字符类型分为char、varchar
5.1、char
char(4):数据超过四个,直接报错,小于四个,使用空格补充
缺点:浪费空间
优点:存取简单,按照固定的字符存取
5.2、varchar
varchar(4):数据超过四个,直接报错,小于四个,有几个存几个(没有空格)
缺点:存取麻烦,存取都需要先制作报头,通过报头反馈的信息才能读出数据
优点:节省空间
5.3、字符类型的长度计算
create table t1(name char(4)); create table t2(name varcher(4)); insert into t1 values('a'); insert into t2 values('a'); #计算字段长度:char_langth select char_langth(name) from t1; #硬盘中会有空格存在,但是显示时会将空格隐藏 select char_langth(name) from t2; #修改sql_mode 使mysql不自动将隐藏的空格删除 set global aql_mode = 'STEICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';
六、时间类型
时间类型分为date、datetime、time、year
date:年月日
datetime:年月日时分秒
time:时分秒
year:年
create table student(id int, name varchar(16), born_year year, birth date, study_time time, reg_time datetime ); insert into student values(1,'egon','1970','1970-11-11','11:11:11','1970-11-11 11:11:11')
七、枚举与集合类型
枚举:enum(多选一)
集合:set(多选多)
7.1、枚举的使用
存数据时只能从枚举中选取一个存储,否则报错
create table user(id int, name char(16), gender enum('male','female','others')); insert into user values(1,'json','male'); #正确 insert into user values(2,'egon','abc'); #报错
7.2、集合的使用
存数据时可以从集合中选取一个或者读多个存储,但不能选择集合外的
create table teacher(id int, name char(16), gender enum(‘male’,'famale'), hobbly set('read','dbj','drink_tea')); insert into teacher values(1,'json','male','read,dbj');#正确 insert into teacher values(2,'egon','famale','abc') #报错
八、约束条件
约束条件:
not null:不能存在空
zorefill:补零
unsigned:无符号(正负号)
default(‘male’):默认值(可以在集合后搭配默认值,后续可以不用输入,输入时则更改)
unique(ip,port):唯一(unique限定的值必须要有唯一性,否则报错)
zorefill和unsigned一起用时,可以限制整型的取值范围,不能有负数,并且范围值将是原来的两倍