MySQL基础之存储引擎与基本数据类型

存储引擎

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
存储数据的方式不一样

# 查看所有的存储引擎
show engines;

# 需要知道的四个引擎
1 myisam
-mysql 5.5 及之前的版本默认的存储引擎
-存储数据的速度都非常快,但是功能较少,安全性较低

2 innodb
-mysql 5.6 及之后的版本默认的存储引擎
-存取速度没有myisam快,但是功能更多,安全性更高

3 blackhole
-往里面写入任何数据都会直接消失(黑洞)

4 menory
-用内存存储数据,断电数据消失

# 文件个数不一致
innodb
.frm --- 表结构
.ibd --- 表数据和索引
myisam
.frm --- 表结构
.MYD --- 表数据
.MYI --- 索引
blackhole
.frm --- 表结构
menory
.frm --- 表结构

MySQL基本数据类型

1
2
3
4
5
6
7
8
9
10
11
1 整型
tinyint smallint int bigint
1.1 不同的类型能够存储的数字范围不一样

# 结论:所有的整型都是自带符号

'''
(了解)如果不想让整型有符号:
create table t6(id tinyint unsigned);
insert into t6 values(-129),(256);
'''
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

2 浮点型
float(255, 30)
-总共255位,小数占30
double(255, 30)
-总共255位,小数占30
decimal(65, 30)
-总共65位,小数占30

'''
精确度不一样
float < double < decimal

在实际开发中,很多时候看似需要用数字存储的数据
其实我们可能都是使用的字符串存储
'''
1
2
3
4
5
3 字符类型
char(4)
最大存储四个字符 超出了直接报错 不超过空格填充至四位
varchar(4)
最大存储四个字符,超出了直接报错 不超过有几位存几位
1
2
3
4
5
6
4 日期类型

datetime --- 年月日 时分秒
time --- 时分秒
date --- 年月日
year --- 年
1
2
3
4
5
6
7
8
9
10
11
12
13
14
5 枚举与集合
枚举 --- 多选一 ---> (例如性别)
create table t1(
id int,
name varchar(32)
gender enum('male','female')
);

集合 --- 多选多(多选一) ---> (例如爱好)
create table t2(
id int,
name varchar(32)
hobby set('read','study','music')
)

严格模式

1
2
3
4
5
6
7
8
9
10
# 查看sql_mode
show variables like '%mode%';

# 修改
get global sql_mode='strict_trans_tables';

# 修改完成后退出客户端重新进入即可

# 验证char是否自动填充
set global sql_mode='strict_trans_tables,pad_char_to_full_length'

字符类型对比

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char(4)
优点:整存整取 速度快
缺点:浪费硬盘空间

varchar(4)
优点:节省硬盘空间
缺点:速度没有char快

# 各有优缺点,具体结合实际情况


'''
针对整型字段,括号里面的数字不是用来限制存储长度的而是用来控制显示长度的
---> 定义整型字段无需自己写括号和数字
'''

创建表的完整语法

1
2
3
4
5
6
7
8
9
10
11
create table 表名(
字段名1 字段类型(宽度) 约束条件1 约束条件2...,
字段名2 字段类型(宽度) 约束条件,
字段名3 字段类型(宽度) 约束条件
)
'''
易错点:
1 字段名和字段类型是必须的,宽度和约束条件是可选的
2 约束条件可以有多个
3 最后一个字段结尾不能加逗号,否则报错
'''