一、存储引擎:就是用于针对不同的数据格式而采用的不同的处理机制。
二、MySQL主要的存储引擎
1、innodb:MySQL5.5开始默认的存储引擎,虽然速度比不上Myisam,但是存储的数据更加安全。
2、myisam:MySQL5.5以前默认的存储引擎,虽然速度比Innodb要快,但是存储数据的安全性不如Innodb。
3、memory:内存引擎,数据全部存放于内存中,断电数据丢失。
4、blackhole:黑洞引擎,无论存什么,都立即消失。
5、相关SQL语法:
①show engines---查看所有可用的存储引擎。
②create table t1(id int) engine='innodb'---新建表,并声明使用的存储引擎,不声明默认为‘innodb’。
三、创建表的完整SQL语法:create table t1(字段名1 类型(宽度) 约束条件,字段名2 类型(宽度) 约束条件1 约束条件2)。
1、同一张表的字段名不能重复。
2、字段名和类型是必须的。
3、宽度和约束条件不是必须的。
4、字段编辑组之间以逗号隔开,但是最后一个字段编辑组后面一定不能加逗号。
5、宽度一般情况下是对存储数据长度的限制,不同版本有不同的效果:
①MySQL5.7以前默认没有开启严格模式,超出规定宽度的数据会被截取为规定宽度存入,不会报错。
②MySQL5.7开始默认开启严格模式或其他版本手动开启严格模式,超出规定宽度时会报错。
6、null: 通用类型,不受宽度限制的约束,可以存于任意认可null的字段下,类似于python语法中的None。
7、约束条件之not null:不能存入null,否则报错。
8、小结:宽度一般情况下用来限制数据的长度,而约束条件是在宽度限制的基础上再增加了限制。
四、严格模式
1、查看严格模式之模糊匹配法:show variables like ‘%mode’---%可以匹配任意多个字符,若改为单下划线_则只能匹配任意单个字符。
2、切换严格模式/宽松模式:
①切换为严格模式:改my.ini文件里[mysqld]下的sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION。
②切换为宽松模式:改my.ini文件里[mysqld]下的sql_mode = NO_ENGINE_SUBSTITUTION。
五、基础数据类型之整型
1、用途:年龄,等级,编号等
2、可存储范围由小到大分类:tinyint < smallint < meduiint < int < bigint 。
3、约束条件之unsigned:无符号,默认情况下是有符号的。
4、限制值:若限制为N,无符号情况下可存储范围为0~N,有符号情况下为-N/2~N/2。超过限制值时,则存为限制值。
5、约束条件之zerofill:以0填充,整型括号里面声明的数字不是表示限制数据的长度,而是表示填充长度,不足填充长度的位数,默认以空格填充,比如声明长度5,存入数据为123,则会以‘ 123’存入,若用了zerofill声明,则会以‘00123’存入,但不能超过限制值。
6、针对整型的数据,一般用int,限制值有11位,应该就可以满足绝大部分数据的需求,括号若不声明填充长度,会默认按照限制值位数执行。
六、基本数据类型之浮点型
1、用途:身高,体重,薪资等
2、分类:
①float(255,30):总共255位,小数部分占30位,精度是小数点后7位。
②double(255,30):总共255位,小数部分占30位,精度是小数点后15位。
③decimal(65,30):总共65位,小数部分占30位,精度是小数点后30位。
3、使用场景:要结合实际需求灵活选择。
七、基本数据类型之字符类型
1、分类:
①char:定长,不够声明的宽度以空格补齐。缺点:浪费空间。优点:直接按照固定长度存取,效率比较高。
②varchar:变长,存成实际长度,但不能超过声明的宽度。缺点:存取需要制作报头和读取报头,较为麻烦。优点:节省空间。
③小结:数据量不多的情况下用char比较高效,但是数据量比较大的时候用varchar节省的空间也是比较可观的。所以还是要结合实际灵活选择。
2、自动剔除:虽然存储数据有自动补齐的空格,但是MySQL在显示数据时,会自动剔除空格,可以改my.ini文件里[mysqld]下的sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,PAD_CHAR_TO_FULL_LENGTH。如此配置可以不自动剔除空格。
2、统计字段长度:select char_length(name) from t1。
八、基本数据类型之时间类型
1、data:年月日,如,2020-05-04。
2、datatime:年月日 时分秒,如,2020-05-04 12:34:56。
3、time:时分秒,如,12:34:56。
4、year:年,如2020。
九、基本数据类型之枚举与集合
1、enum:枚举,多选一,create table t1(hobby enum('a','b','c'),存入的数据只能在定义好的('a','b','c')选择其中的一个,多选或不在其中会报错。
2、set:集合,多选多,create table t1(hobby set('a','b','c'),存入的数据只能在定义好的('a','b','c')选择其中的一个或多个,不在其中会报错。