#MYSQL
- 约束
- 约束保证数据的完整性和一致性
- 约束分为表级约束和列级约束
- 约束类型包括:
- NOT NULL
- PRIMARY KEY
- UNIQUE KEY
- DEFAULT
- FOREIGN KEY
- 保持数据一致性,完整性
- 实现一对一或一对多关系
- 要求:
- 父表和子表必须使用相同的存储引擎,而且禁止使用临时表
- 数据表的存储引擎只能为InnoDB
- 外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。
- 外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引
- MySQL配置文件
- default-storage-engine=INNODB //编辑数据表的默认存储引擎 - 啊
- 外键约束
- 外键约束的参照操作(仅引擎InooDB支持,所以不常用):
- CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行
- SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL
- RESTRICT:拒绝对父表的删除或更新操作
- NO ACTION:标准SQL的关键字,在MySQL与RESTRICT相同
- 外键约束的参照操作(仅引擎InooDB支持,所以不常用):
- 表级约束与列级约束
- 对一个数据列建立的约束,称为列级约束
- 对多个数据列建立的约束,称为表级约束
- 列级约束既可以在列定义时声明,也可以在列定义后声明。
- 表达式
- 查找表达式:
- 每一个表达式表示想要的一列,必须有至少一个。
- 多个列之间以英文逗号分隔。
- 星号(*)表示所有列。tbl_name.*可以表示命名表的所有列。
- 查询表达式可以使用【AS】 alias_name为其赋予别名。
- 别名可用于GROUP BY,ORDER BY 或HAVING子句。
- 条件表达式
- 对记录进行过滤,如果没有指定WHERE子句,则显示所有记录。
- 在WHERE表达式中,可以使用MySQL支持的函数或运算符。
- 查询结果分组
- [GROUP BY {col_name | position} [ASC | DESC], …]
- 分组条件
- [HAVING where_condition]
- 对查询结果进行排序
- [ORDER BY {col_name | expr | position} [ASC | DESC], …]
- 限制查询结果返回的数量
- [LIMIT {[offset,] row_count | row_count OFFSET offset}]
- 查找表达式:
- 子查询
- 子查询(Subquery)是指出现在其他SQL语句内的SELECT子句
- 子查询指嵌套在查询内部,且必须始终出现在圆括号内
- 子查询可以包含多个关键字或条件,如DISTINCE、GROUP、ORDER BY、LIMIT,函数等。
- 子查询的外层查询可以是:SELECT,INSERT,UPDATE,SET或DO。
- 子查询可以返回标量、一行、一列或子查询。
- 使用比较运算符的子查询:=、>、<、>=、<=、<>、!=、<=>
- 语法结构:
- operand comparison_operator ANY (subquery)
- operand comparison_operator SOME (subquery)
- operand comparison_operator ALL (subquery)
- 连接
- 类型
- INNER JOIN,内连接
- 在MySQL中,JOIN,CROSS JOIN和INNER JOIN是等价的
- 显示左表及右表符合连接条件的记录
- LEFT [OUTER] JOIN,左外连接
- 显示左表的全部记录及右表符合连接条件的记录
- 数据表B的结果集依赖数据表A
- 数据表A的结果集根据左连接条件依赖所有数据表(B表除外)。
- 左外连接条件决定如何检索数据表B(在没有指定WHERE条件的情况下)。
- 如果数据表A的某条记录符合WHERE条件,但是在数据表B不存在符合连接条件的记录,则将生成一个所有列为空的额外的B行。
- 如果使用内连接查找的记录在连接数据表中不存在,并且在WHERE子句中尝试以下操作:col_named IS NULL时,如果col_name被定义为NOT NULL,MySQL将在找到符合连执着条件的记录后停止搜索更多的行。
- RIGHT [OUTER] JOIN,右外连接
- 显示右表的全部记录及左表符合连接条件的记录
- 多表连接
- 自身连接
- 同一个数据表对其自身进行连接
- INNER JOIN,内连接
- 条件
- 使用ON关键字来设定连接条件,也可以使用WHERE来代替
- 通常使用ON关键字来设定连接条件,使用WHERE关键字进行结果集记录的过滤。
- 类型
- 啊
- 啊
- 啊
- 啊