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(...);  # 指名道姓的传值
posted @ 2021-05-02 16:43  黑影Poco  阅读(67)  评论(0)    收藏  举报