1.什么是SQL?
关系型数据库当中通用的查询语言。全名:结构化查询语言。
-
SQL标准(ANSI/ISO)
SQL-89
SQL-92
SQL-99
SQL-03 -
SQL 常用分类
DDL :数据定义语言
DCL :数据控制语言
DML :数据操作语言
DQL:实际包含在DML -
SQL_MODE
5.7之后采用的是严格模式
作用:
为了我们SQL在执行时更加严谨,符合常识,符合科学等。。。
例子:
1>日期格式:2020-07-01
2>触发运算:除数不能为0
查看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_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
设置
mysql> select@@sql_mode='';
+---------------+
| @@sql_mode='' |
+---------------+
| 0 |
+---------------+
1 row in set (0.00 sec)
mysql>set sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
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_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
- 字符集和校对规则
5.1字符集 show charset;
utf8
utf8mb4
utf8 和utf8mb4 区别?
例如:utf8 不完整,emoji表情字符是不支持的, utf8mb4是支持的。
根本原因:utf8字符最大长度为3字节,utf8mb4是4字节
5.2校对规则(排序规则)
show collation;
作用:影响到了字符串的排序
6.数据类型 https://www.jianshu.com/p/08c4b78402ff
作用:约束存储数据的数据更加有意义,符合对于这个列的定义
6.1 数字类型

6.2 字符串类型

char(10)
定长类型的字符串类型。最多存储10个字符,如果存了5个,剩余空间用空格填充
varchar(10)
变长类型的字符串类型。最多存储10个字符,如果存了5个,按需分配存储空间,另外需要1-2字节,存储字符长度
怎么选择:一般情况下 变长字符串就用varchar 固定长度一般采用char类型
enum():枚举类型
应用场景:列中的数据,有限个数的值的时候,并且是有规律。
enum('bj','sh','tj'....)
6.3 时间日期

DATETIME
范围为从 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 03:14:07.999999。
timestamp会受到时区的影响
6.4 二进制

6.5 json类型
略
- 约束和其他表属性
列属性
约束(一般建表时添加):
**primary key** :主键约束
设置为主键的列,此列的值必须非空且唯一,主键在一个表中只能有一个,但是可以有多个列一起构成。
**not null** :非空约束
列值不能为空,也是表设计的规范,尽可能将所有的列设置为非空。可以设置默认值为0
**unique key** :唯一键
列值不能重复
**unsigned** :无符号
针对数字列,非负数,要跟在数字类型之后,比如int。
其他属性:
**key** :索引
可以在某列上建立索引,来优化查询,一般是根据需要后添加
**default** :设置默认值,一般配合not null 使用
列中,没有录入值时,会自动使用default的值填充
**auto_increment**:自增长
针对数字列,顺序的自动填充数据(默认是从1开始,将来可以设定起始点和偏移量) 一般配合主键
**comment ** : 列或者表进行注释
网友评论