目录
- 友情提醒
- 第一章:MYSQL数据库多表主键和外键
- 1)外键介绍(FOREIGN KEY)
- 2)外键约束作用
- 2)三种情况下添加外键约束
- ①一对一关系
- ②一对多关系
- 多对多关系
- 4)删除外键约束
- 第二章:MYSQL数据库多表查询
- 1)内连接,外连接等
- 2)关联子查询
友情提醒
先看文章目录,大致了解知识点结构,直接点击文章目录可以跳转到文章指定位置。
第一章:MYSQL数据库多表主键和外键
1)外键介绍(FOREIGN KEY)
①外键是表格中的特殊字段但不是主键,外键用来建立主表与从表的关联关系,添加了外键的表我们称为从表,被引用主键的表我们称为主表。默认情况下主表和从表是相互约束的关系。
②外键约束的作用:避免多表中垃圾数据的产生,约束两个表中数据的一致性和完整性。
图片来自:http://cd.itheima.com/news/20220810/170702.html
③一个表可以有一个或多个外键,必须为主表定义主键,主表中的主键不能包含空值,但是外键可以是空值,如果不是空值,则每个外键的值必须等于主表中主键的某个值。
举例:每个外键的值必须等于主表中主键的某个值
主键的id字段数据是1,这时候从表的外键字段可以是1,如果想添加tid=2会报错。
tid不能值=2,因为外键的值必须等于主表中主键的某个值:
④父表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则父表与子表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
⑤写SQL语句时,需要在父表的表名后面指定列名或列名的组合。这个列或列的组合必须是父表的主键或候选键。
外键中列的数目和数据类型必须和主表的主键中的相同。
2)外键约束作用
第一种:阻止执行
①从表插入新行,其外键值不是主表的主键值便阻止插入;
②从表修改外键值,新值不是主表的主键值便阻止修改;
③主表删除行,其主键值在从表里存在便阻止删除(要想删除,必须先删除从表的相关行);
④主表修改主键值,旧值在从表里存在便阻止修改(要想修改,必须先删除从表的相关行)。
第二种:级联操作
在外键约束中,主表和从表是相互约束,如果想通过主表去影响从表的数据,需要使用级联操作。
主表删除行,连带从表的相关行一起删除;
#级联删除:外键约束 on delete cascade;
alter table emp add foreign key(did) references dept(id) on update cascade ;
主表修改主键值,连带从表相关行的外键值一起修改。
#级联更新:外键约束 on update cascade;
alter table emp add foreign key(did) references dept(id) on delete cascade;
2)三种情况下添加外键约束
①一对一关系
在任何一方添加外键,引用到另外一方的主键。
一般一对一关系很少见,遇到一对一关系的表最好是合并表。
-- 新添加一列字段:
alter table 从表 add 新列 int;
-- 将新列设为外键援引主表的主键
alter table 从表 add foreign key(外键) references 主表(主键);
②一对多关系
在多的一方添加外键,引用到一的一方的主键。
-- 表已经创建完成:alter table 从表 add foreign key(外键) references 主表(主键);
alter table 从表 add foreign key(外键) references 主表(主键);
--创建表时:在从表中
foreign key(did) references dept(id);
多对多关系
创建第三张表,在第三张表中添加两个外键,分别援引另外两个表的主键。
已有coder,project表,创建第三张表分别援引这两个表的主键。
-- 创建第三张表分别指令另外两个表的主键。
create table coder_project(
cid int,
pid int,
foreign key(cid) references coder(id),
foreign key(pid) references project(id)
);
4)删除外键约束
查询外键约束名使用:show create table 数据表名 ;
-- 语法:alter table emp drop foreign key 外键约束名;
alter table emp drop foreign key emp_ibfk_1;
第二章:MYSQL数据库多表查询
1)内连接,外连接等
2)关联子查询
看这个大佬写的就好了,他写的太好了我就不献丑了