一.约束
(一)约束概述
1.约束的概念:约束时作用与表中字段上的规则,用于限制储存在表中的数据。
2.目的:保证数据库中数据的正确,有效性和完整性。
3.分类:
非空约束 限制该字段的数据不能为null 关键字: NOT NULL
唯一约束 保证该字段的所有数据都是唯一,不重复的。 UNIQUE
主键约束 主键是一行数据的唯一标识,要求非空且唯一。 PRIMARY KEY
默认约束 保存数据时,如果未指定该字段的值,则采用默认值 DEFAULT
检查约束 保证字段值满足某一个条件 CHECK
外键约束 用来让两张表
之间的数据之间建立起链接,保证数据的一致性和完整性。
FOREIGN KEY
例如:
create table tdada(
id int auto_increment primary key comment 'ID唯一标识',
name varchar(10) not null unique comment '姓名',
age int check ( age>0&&age<120 ) comment '年龄'
);
(二)外键约束
1.添加外键: CREATE TABLE 表名(
字段名 数据类型
......
CONSTRAINT [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)
);
表名 TABLE ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表(主表列表)
2.删除或更新行为
NO ACTION 当在父表中删除/更新对应记录时,首先检查该记录是否右对应外键,如果有则不允许删除或更新
RESTRICT 当在父表中删除或更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除或修改
CASCADE 当在父表中删除或更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除或更新外键在子表中的记录/
SET NULL 当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置字段中该外键值为null(只要求该外键允许取null)
SET DEFAULT 当父表发生变更时,子表将外键列设置成一个默认值(lnnodb不支持)
语法: ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名(主表字段名) ON UPDATE CASCADE ON DELETE ACSCADE
约束总结:
二.多表查询
1.多表关系
一对多:在多的一方设置外键,关联一的一方的主键
多对多:建立中间表,中间表包含两个外键,关联两张表的主键
一对一:用于表结构拆分,在其中任何一方设置外键(UNIQUE),关联另一个的主键。
2.多表查询
内连接
隐式: SELECT...FROM 表A,表B WHERE 条件...
显示: SELECT...FROM 表A INNER JOIN 表 条件....
外连接
左边: SELECT...FROM 表A LEFT JOIN 表B ON 条件...
右边: SELECT...FROM 表A RIGHT JOIN 表 BON 条件...
自链接:SELECT...FROM 表A 别名1,表A 别名2 WHERE 条件...
子查询:标量子查询,列子查询,行子查询,表子查询
3.多表查询概述
概述:指从多张表中查询数据。
笛卡尔积:笛卡尔积式指在数学中,两个集合A集合B和B集合的所有组合情况(在多表查询中,需要消除无效的笛卡尔积)
4.多表查询概述
多表查询分类
链接查询
内链接:相当于查询A,B交集部分数据
外连接:
左外链接:查询左表所有数据,以及两张表交集部分数据
右外链接:查询右表所有数据,以及两张表交集部分数据
自链接:当前表和自身的连接查询,自链接必须使用表别名。
子查询
5.连接查询-内连接
内连接查询语法:
隐式内连接
SELECT 字段列表 FROM 表1,表2 WHERE 条件...;
显示内连接
SELECT 字段列表 FROM 表1 [INNER] ON 表2 ON 连接条件...;
6.连接查询-外连接
外连接查询语法:
左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] OIN 表2 ON 表...;
相当于查询表1(左表)的所有数据包含 表1和表2交集的部分的数据
右外连接
SELECT 字段列表 FROM 表1 RIGHT[OUTER] JOIN 表2 ON 条件...;
相当于查询表2(右表)的所有数据包含表1和表2交集部分的数据
7.连接查询-自查询
自连接查询语法:
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...;
自连接查询,可以式内连接查询,也可以是外连接查询。
8.联合查询-union,union all
对于union查询,就是把多次查询额结果合并起来,形成一个新的查询结果集。
SELECT 字段列表 FROM 表A...
UNION [ALL]
SELECL 字段列表 FROM 表B...;
对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
UNION ALL 会将全部的数据直接合并在一起,union会对合并之后的数据去重。
9.子查询
概念:SQL语句中嵌套SELECT语句,称为嵌套查询,又称为子查询。
SELCET * FROM, t1 WHERE column1= (SELECT column1 FROM t2);
子查询外部的语句可以式INSERT /UPDATE/ DELETE/SELECT的任何一个。
根据查询结果不同,分为:
标量子查询(子查询结果为单个值)
列子查询(子查询结果为一列)
行子查询(子查询结果为一行)
表子查询(子查询结果式多行多列)
根据子查询的位置,分为WHERE 之后,FROM 之后,SELECT之后。