1、名词认识

1.1、SQL

SQL: 结构化查询语言, 属于关系型数据库中的语句

1.2、SQL标准

SQL89、SQL92、SQL99、SQL03

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

  1. mysql> select @@sql_mode;
  2. +-----------------------------------------------------------------------------------------------------------------------+
  3. | @@sql_mode |
  4. +-----------------------------------------------------------------------------------------------------------------------+
  5. | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
  6. +-----------------------------------------------------------------------------------------------------------------------+
  7. #参数说明
  8. ONLY_FULL_GROUP_BY: 针对 group by 语句执行时的规范
  9. STRICT_TRANS_TABLES: 针对事务表启动严格模式
  10. NO_ZERO_IN_DATE: 日期中不能包含0, 2020-00-30
  11. NO_ZERO_DATE: 日期不能为0, 0000-00-00
  12. ERROR_FOR_DIVISION_BY_ZERO: 除数不能为0
  13. NO_AUTO_CREATE_USER: 是否自动创建用户
  14. NO_ENGINE_SUBSTITUTION: 建表时使用了一个不支持的存储引擎是否报错

1.4、字符集

1.4.1、作用

MySQL中的”密码本”

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       :  列的注释,建议每个列都有