外键约束【应用】
如果该列与另外的一张表的主键有关联关系,那么这一列就是外键列。
外键约束能保证数据的正确性和完整性。
外键约束格式:
CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主表主键列名)
constraint:约束
foreign:外国的
reference:引用
简写:可以不知道外键名(默认即可)
FOREIGN KEY (本表外键列名) REFERENCES 主表名(主表主键列名)
建立外键
-- 创建orderlist订单表
CREATE TABLE orderlist(
id INT PRIMARY KEY AUTO_INCREMENT, -- id
number VARCHAR(20) NOT NULL, -- 订单编号
uid INT, -- 订单所属用户
CONSTRAINT ou_fk1 FOREIGN KEY (uid) REFERENCES USER(id) -- 添加外键约束
);
删除外键
-- 标准语法
ALTER TABLE 表名 DROP FOREIGN KEY 外键名;
-- 删除外键
ALTER TABLE orderlist DROP FOREIGN KEY ou_fk1;
建表后添加外键
-- 标准语法
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主键列名);
-- 添加外键约束
ALTER TABLE orderlist ADD CONSTRAINT ou_fk1 FOREIGN KEY (uid) REFERENCES USER(id);
多表关系【理解/分析】
一对一
**建表原则:**在任意一个表建立外键,去关联另外一个表的主键
一对多
**建表原则:**在多的一方,建立外键约束,来关联一的一方主键
多对多
**建表原则:需要借助第三张表中间表,中间表至少包含两个列,**这两个列作为中间表的外键,分别关联两张表的主键
多表查询【掌握】
1.内连接
查询结果是两个表的交集
2.外连接
查询结果是一张表的全部和两张表的交集。
3.子查询
3.1 子查询的结果是单列单行的(一个值) 可以直接做比较运算例如:= >
- 2子查询的结果是单列多行的(多个值) 可以使用in函数做运算:in(子查询)
3.3 子查询的结果是多行多列的(一个表)可以把结果当作临时表使用
select student t1,(子查询) as t2 where t1.id = t2.uid ;
4.自关联查询
同一张表使用别名当作2张表去使用。前提是表中的数据有关联关系。
select* from student t1 ,student t2 where t1.id = t2.mgr;