2、储存引擎与基础数据类型
一、存储引擎
存储引擎就是存储数据的不同方式
1、需要知道的四个引擎
InnoDB:MySQL5.6及之后版本默认的存储引擎,存取数据速度没有MyISAM快,但是功能更多,安全性更高
MyISAM:MySQL5.5及之前版本默认的存储引擎,存取数据的速度都非常快 但是功能较少安全性较低
BlackHole:“黑洞引擎”,往里面写入的任何数据都会直接消失
Memory:“内存引擎”,数据存放于内存中,断电数据丢失
2、不同存储数据的特点
#查看所有的存储引擎
show engines;
# 创建不同数据类型的文件(不同的存储引擎)
create table t1(id int) engine=InnoDB;
create table t2(id int) engine=MyISAM;
create table t3(id int) engine=BlackHole;
create table t4(id int) engine=Memory;
# 文件个数不一致
InnoDB
.frm 表结构
.ibd 表数据和索引(类似于书的目录)
MyISAM
.frm 表结构
.MYD 表数据
.MYI 索引(类似于书的目录)
BlackHole
.frm 表结构
Memory
.frm 表结构
二、MySQL基本数据类型
整型:tinyint、smallint、int、bigint
浮点型:float、double、decimal
字符串类型:char、varchar
日期类型:datatime、date、time、year
枚举与集合类型:enum、set
1、整型
| 类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
|---|---|---|---|---|
| tinyint | 1 byte | (-128,127) | (0,255) | 小整数值 |
| smallint | 2 bytes | (-32768,32767) | (0,65535) | 大整数值 |
| int | 4 bytes | (-2147483648,2147483647) | (0,4294967295) | 大整数值 |
| bigint | 8 bytes | (-9223372036854775808,9223372036 854775807) | (0,18446744073709 551615) | 极大整数值 |
# 1.不同的整数类型能够存储的数字范围不一样
# 2.所有的整型都自带符号
create table t1(id tinyint); # 创建一个叫t1表
insert into t1 values(-300),(500); # 往表内写入-300到500范围的数据
select * from t1; # 输入查看表的命令,结果如下
+------+
| id |
+------+
| -128 |
| 127 |
+------+
# 因为tinyint能够存储的数据范围是(-128,127),所以即使我们写入超过这个范围的数字也不会显示
# 如果不想让整型有符号需要再括号末尾加上一句unsigned,如下
create table 表名(id tinyint unsigned);
'''
整型字段,括号里面的数字不是用来限制存储长度而是用来控制展示长度
所以 定义整型字段无需自己写括号和数字
'''
2、浮点型
float、double、decimal
create table t2(id float(255,30)); # 创建一个叫t2的表,括号内表示总共255位,小数占30位
insert into t2 values(123.44444444444444444444); # 往表内写入数据
select * from t2; # 输入查看表的命令,结果如下
+------------------------------------+
| id |
+------------------------------------+
| 123.444442749023440000000000000000 |
+------------------------------------+
'''从小数点后的第五个4之后,精度变得不准确
不同的浮点类型精确度不一样,精确度:float < double < decimal
在实际开发中,很多时候看似需要用数字存储的数据,其实我们可能都是使用的字符串存储'''
3、字符串类型
| 类型 | 范围 | 说明 |
|---|---|---|
| CHAR | 0-255 bytes | 超出存储报错,不超出则用空格填充 |
| VARCHAR | 0-65535 bytes | 超出存储报错,不超出则按实际存储 |
create table t3(id int,name char(4)); # 创建一个叫t3的表,并指定只能存四个字符
create table t4(id int,name varchar(4));
insert into t3 values(1,'pococo'); # 往表内写入数据,写入六个字符
insert into t4 values(1,'pococo');
select * from t3,t4; # 输入查看表的命令,结果如下
+------+------+------+------+
| id | name | id | name |
+------+------+------+------+
| 1 | poco | 1 | poco |
+------+------+------+------+
'''char——优点:整存整取,速度快。缺点:浪费硬盘空间
varchar——优点:节省硬盘空间。缺点:速度没有char快'''
我们存入的字符溢出了,导致溢出的字符直接没了
按道理来说,存入的数据不符合规范应该报错更加安全,
这里因为之前修改了配置并且没有指定sql_mode严格模式
严格模式
# 查看sql_mode
show variables like '%mode%';
# 修改
set global sql_mode='strict_trans_tables';
# exit退出客户端重新进入即可
4、日期类型
datetime:年-月-日 时-分-秒
time:时分秒
date:年月日
year:年
# 创建表
create table t5(
id int,
name varchar(32),
reg_time datetime,
study_time time,
birth date,
r_time year
);
# 写入数据
insert into t5 values(1,'poco','2000-11-11 11:11:11','11:11:11','2000-01-21','1995');
# 输入查看表的命令,结果如下
select * from t5;
+------+-------+---------------------+------------+------------+--------+
| id | name | reg_time | study_time | birth | r_time |
+------+-------+---------------------+------------+------------+--------+
| 1 | poco | 2000-11-11 11:11:11 | 11:11:11 | 2000-01-21 | 1995 |
+------+-------+---------------------+------------+------------+--------+
5、枚举与集合
enum枚举用于多选一,在创建表时事先设定好记录的内容,写入数据时只能从事先设定的数据中 选择一个。具体场景比如说性别,只能有男性或者女性的选项
set集合用于多选多,也可以选择一个,和枚举一样事先设定好记录的内容,写入数据时只能写入事先设定的数据中的内容,具体场景如爱好的选择,可以拥有多个爱好
# 枚举的创建
create table q1(
id int,
name char(16),
gender enum('男','女')
);
# 集合的创建
create table q2(
id int,
name char(32),
hobby set('音乐','读书','运动')
);
# 写入数据到q1
insert into q1 values(1,'poco','男');
# 写入数据到q2
insert into q2 values(2,'poco','运动,音乐');
两张表的效果如下
+------+------+--------+
| id | name | gender |
+------+------+--------+
| 1 | poco | 男 |
+------+------+--------+
+------+-------+---------------+
| id | name | hobby |
+------+-------+---------------+
| 1 | poco | 音乐,运动 |
+------+-------+---------------+
三、创建表的完整语法
create table 表名(
字段名1 字段类型(宽度) 约束条件,
字段名2 字段类型(宽度) 约束条件,
字段名3 字段类型(宽度) 约束条件
)
"""
1.字段名和字段类型是必须要写的,但宽度和约束条件是可选的
2.约束条件可以有多个
格式为:字段名1 字段类型(宽度) 约束条件1 约束条件2 约束条件3
3.最后一个字段结尾不能加逗号
"""
四、添加数据的两种方式
insert into 表名 values(...); # 按照字段顺序一一传值
insert into 表名(...) values(...); # 指名道姓的传值

浙公网安备 33010602011771号