1. 什么是SQL
1.1 SQL简介
结构化查询语言
1.2 SQL的标准
SQL89 SQL92 SQL99 SQL03 SQL05
1.3 SQL_MODE
限制除数为零;设置SQL语句的;only_full_groupby;约束日期规范,防止出现零年零月零分(查看sql_mode:select@@sql_mode;)
1.4 SQL类型
DDL : 数据定义语言,库名,库属性,表名,表属性,列(列名,列属性),数据行
DCL : 数据控制语言,权限
DML : 数据操作语言,数据行
DQL : 数据查询语言,数据行
1.5 SQL功能
主要功能:管理、操作数据库对象
库:库名,库属性
表:表名,表属性,列(列名,列属性),数据行
2. MySQL规范性存储限制
2.1 字符集Charset
utf8 : 最大字节长度3个
utf8mb4 : 最大字节长度4个,可以存储emoji表情字符.
mysql> show charset; ##查看所有的字符集.
2.2 排序规则
mysql> show collation; ##默认是大小写不敏感(_ci, _bin)
2.4 数据类型
- 数字类型
tinyint:1字节可存储255个数字 ===>11111111===>0-2^8-1===>-2^7-2^7-1(3位)
int:4字节长度 ===>0-2^32=>-2^32-2^32-1(10位数)
bigint:8字节长度 ===>0-2^64-1 ===>-2^63-2^63-1(20位数)
- 字符串
char(10): 定长,最多10个字符,占用存储空间一定,最多存储255个字符
varchar(10): 最多存储65535个字符
变长类型,最多10个,按需分配存储空间
需要额外1个字符或2个字符存储字符长度
因素:变长的字符串列,90%几率都是varchar
具体的原因: 节省空间
enum('m','f'): 枚举类型
enum('bj','sh','tj','cq')
- 时间类型
TIMESTAMP:范围为从1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999
timestamp会受到时区的影响.1970-01-01 00:00:00.000000 至 2038-01-19 13:14:07.999999
- 二进制类型:通过算法,转换成二进制,在录入到数据库
- JSON : 字典类型;(一个大括号+一个键值对)
-- json的语法格式
mysql> CREATE TABLE t1 (jdoc JSON);
mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
-- json的查询语法格式
mysql> SELECT JSON_TYPE('["a", "b", 1]');
mysql> SELECT JSON_TYPE('"hello"');
- gis : 地理位置
3. 约束
3.1 PrimaryKey(PK) 主键
特点:唯一且非空,一张表中只能有一个主键约束,一般是一个数字列,最好的是无意义的.
3.2 NOT NULL 非空
特点:不能为空。建议业务关键列(索引列),尽量设置成非空
3.3 UNIQUE 唯一约束
特点:不能有重复值
3.4 unsigned 数字列无符号
特点:必须要加载数字列后,表示数字无负数,一般适用于年龄……
4. 其他属性
4.1 AUTO INCREMENT自增长
特点:适用于ID主键列
4.2 DEFAULT默认值
特点:使用在NOT NULL列中,不填写值时,自动生成默认值
4.3 COMMNENT注释
特点:建议每个列都有一个注释
5. DCL控制语言
grant
remove