今日内容概要
-
存储引擎
- MySQL主要的存储引擎
- 数据类型
- 整型
- 浮点型
- 字符类型
- 日期类型
- 枚举与集合类型
- 约束条件
今日内容详细
- 存储引擎
日常生活中文件格式有很多种,针对不同的文件格式会有不同的存储方式和处理机制(txt/pdf/mp3/mp4)
针对不同的数据,应该也要有不同的处理机制来存储
存储引擎就是不同的处理机制
MySQL主要存储引擎
- Innodb
是MySQL5.5版本之后默认的存储引擎
存储数据更加安全
- MyIsam
是MySQL5.5版本之后默认的存储引擎
速度要比Innodb更快,但是我们更加注重的是数据的安全
- memory
内存引擎(数据全部存放在内存中),断电数据丢失
- blackhole
无论存什么数据,都立刻消失(黑洞)
""" #查看所有引擎 show engines; #创建库 create database day45; #切换到day45库下 use day45; #用不同的存储引擎在存储表的时候,有什么异同点 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; #执行以上四条语句之后,会在day45中生成4张表 Innodb t1.frm #frm 表结构 t1.ibd #ibd 表数据 Myisam t2.frm #frm 表结构 t2.MYD #MYD 表数据 t2.MYI #MYI 表索引 类似于书的目录,基于目录查找数据,速度更快 memory t3.frm #frm 表结构 数据在内存,无需文件存储表数据 blackhole t4.frm # frm 表结构 #插入几条数据 insert into t1 values(1); insert into t2 values(1); insert into t3 values(2); insert into t4 values(1); 运行之后查看结果 mysql> select * from t1; +------+ | id | +------+ | 1 | +------+ 1 row in set (0.00 sec) mysql> select * from t2; +------+ | id | +------+ | 1 | +------+ 1 row in set (0.00 sec) mysql> select * from t3; +------+ | id | +------+ | 1 | +------+ mysql> select * from t4; Empty set (0.00 sec) 1 row in set (0.00 sec) 由于t4是用blackhole模式创建的表,因此没有数据 t3中的数据是在内存中,如何验证? 先quit退出与服务端的链接,并且重启mysql服务端,重新链接 切换到day45下,然后执行select * from t3; 此时显示:Empty set (0.00 sec) """
- 创建表的完整语法
""" #语法 create table 表名( 字段名1 字段类型(宽度) 约束条件, 字段名2 字段类型(宽度) 约束条件, 字段名3 字段类型(宽度) 约束条件 ); 注意 1.在同一张表中,字段名不能重复 2.宽度和约束条件可以不用写,但是字段名和字段类型是必须得写的 约束条件写的话,也支持写多个 字段名1(宽度) 约束条件1 约束条件2....... create table t5(id); 没有类型,报错 3.最后一行不能有逗号 create table t6( id int, name char(32), ); #报错,最后一行有逗号 补充 #宽度 一般情况下,指的是对存储数据的限制 create table t7(name char); #默认的宽度是1 insert into t7 values(‘jason‘); insert into t7 values(null); #不同的版本会出现不同的结果 5.6版本默认没有开启严格模式,规定只能存1个字符,你多给了几个字符,name我会自动帮你截取1个字符 5.7版本或者以上开启了严格模式,那么规定只能存几个,你在插入数据的时候,就不能超出,一旦超出范围,会立刻报错: ERROR 1406 (22001): Data too long for column ‘name‘ at row 1 严格模式到底开不开呢? MySQL5.7 之后的版本都是默认开启严格模式的 使用数据库的准则: 能尽量少的让数据库干活,就不要给数据库增加额外的压力 #约束条件 null not null create table t8(id int,name char not null); mysql> desc t8; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | char(1) | NO | | NULL | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.01 sec) insert into t8 values(1,null); mysql> insert into t8 values(1,null); ERROR 1048 (23000): Column ‘name‘ cannot be null #宽度和约束条件,到底是什么关系? 宽度是用来限制数据的存储 约束条件是在宽度的基础上增加额外的约束 """