1、名词认识
1.1、SQL
1.2、SQL标准
1.3、sql_mode
1.3.1、作用
影响到了SQL语句的执行行为、为了让数据库在存、取能够满足生活的常识、科学的逻辑、让这些数据有意义
5.7版本开始符合SQL92严格模式
举例:
(1). 现实生活中的常识
日期: 1000-9999年 01-12月 01-31日
(2). 科学逻辑
除法: 除数不能为0
1.3.2、查看sql_mode
mysql> select @@sql_mode;+-----------------------------------------------------------------------------------------------------------------------+| @@sql_mode |+-----------------------------------------------------------------------------------------------------------------------+| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |+-----------------------------------------------------------------------------------------------------------------------+#参数说明ONLY_FULL_GROUP_BY: 针对 group by 语句执行时的规范STRICT_TRANS_TABLES: 针对事务表启动严格模式NO_ZERO_IN_DATE: 日期中不能包含0, 2020-00-30NO_ZERO_DATE: 日期不能为0, 0000-00-00ERROR_FOR_DIVISION_BY_ZERO: 除数不能为0NO_AUTO_CREATE_USER: 是否自动创建用户NO_ENGINE_SUBSTITUTION: 建表时使用了一个不支持的存储引擎是否报错
1.4、字符集
1.4.1、作用
1.4.2、字符集种类
utf8 not UTF-8
utf8mb4 is UTF-8 (万国码)
#特点
utf8: 最大支持3字节的字符、不支持emoji字符
utf8mb4: 最大支持4字节的字符、支持emoji字符
#默认参数
8.0 之前, 默认字符集latin, 8.0 之后为utf8mb4
1.4.3、设置方法
1.5、校对规则 (排序规则)
1.5.1、作用
影响数据的排序方式
底层: ASCII码
a = 97
A = 65
1.5.2、查看排序规则
mysql> show collation;
1.6、数据类型
1.6.1、数字
1.6.1.1、整数型
tinyint: 1个字节存储大小 8位 -2^7 (-128) ~ 2^7-1 (123)
unsigned: 0 ~ 255
建表最大长度: tinyint(3)
int: 4个字节储存大小 32位 -2^31-1 ~ -2^15-1
unsigned: 0 - 4294967296
建表最大长度: int(10) ps:int不能存储手机号码(11位)
bigint 8个字节存储大小 64位 -2^63 ~ 2^63-1
1.6.1.2、浮点型
decimal(m,n)
m: 表示数字总长度,m范围: 1~65
n: 表示小数点后面的位数,n范围: 0~30
decimal(6,2)
-9999.99到9999.99
1.6.1.3、整数型&浮点型区别
tinyint 1bytes 0-255 -128~127
int 4bytes 0-2^32-1 -231~231-1 10位数
bigint 8bytes 0-2^64-1 -263~263-1 20位数
浮点数你们公司怎么存储的
金钱(精度要求高)有关的decimal
精度要求不高的,放大N倍,用整数类
1.6.2、字符串
1.6.2.1、char
char(n)
定长的字符串类型
n范围: 0~255
例如: char(10), 最多存10个字符, 那怕不够10个字符长度, 都以10个字符长度的空间存储, 剩余用空格填充
1.6.2.2、varchar
varchar(n)
变长的字符串类型, 会额外占用1-2字节存储字符长度。255字符之内,额外1字节; 255以上, 额外2字节
n范围: 0~65535
例如: varchar(10): 最多存储10个字符, 按需分配存储空间
'abc' 3长度 = 3+1长度
'256字符' 256 = 256 +2长度
1.6.2.3、char&varchar
char(10) 和 varchar(10)
共同点:
都是字符串类型,最多都只能存10个字符
不同点:
char定长,varchar变长,如果存储变长字符串,一般建议varchar
varchar类型,额外占用1-2bytes,存储字符长度
1.6.3、时间类型
1.6.3.1、datetime
8个字节长度
默认值: null
范围: 1000-01-01 00:00:00.000000 到 9999-12-31 23:59:59.999999
1.6.3.2、timestamp
4个字节长度
默认值: 系统当前时间
1970-01-01 00:00:01.000000 到 2038-01-19 03:14:07.999999
timestamp会受到时区的影响
1.6.4、其它类型
枚举
emun(‘BeiJing’,’ShangHai’,’HangZhou’,’ShenZhen’,’WuHan’)
二进制数据类型
json数据类型
1.6.5、数据类型选择
1.7、约束
PK primary key 非空且唯一
NN not null 非空
UK unique key 唯一
FK
#建议:
1. 每张表设置主键,建议是数字自增列
2. 尽量对每个列设置非空
1.8其它属性
表属性
engine : 存储引擎设置,默认是innodb,也是我们建议的
charset : utf8mb4
comment : 注释
列属性
default : 默认值,一般是在not null 配合使用
auto_increment: 数字列自增长,一般是在主键列配合使用
comment : 列的注释,建议每个列都有
