外键 级联操作 mysql
级联就是联动的操作
如果主表中
级联更新
效果,请表ID变化,从表关联的数据也发生变化
级联更新
如果主表中的数据删除
从表中与它相关联的数据也删除
演练代码
-- 级联更新演练
-- 一般情况下,主表从表关联后,主表的主键不可以再变了
-- 级联更新的情况就不太一样
-- 删除演练表,重新建表
DROP TABLE t1;
DROP TABLE s1;
-- 建主表
CREATE TABLE t1(
id INT PRIMARY KEY AUTO_INCREMENT,
tname VARCHAR(4)
);
-- 建从表
CREATE TABLE s1(
id INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(4),
tid INT
-- constraint fk_st foreign key (tid) references t1(id) on update cascade
);
-- 追加外键
SHOW CREATE TABLE s1;
-- 需要删外键时用下面的
ALTER TABLE s1 DROP FOREIGN KEY fk1;
-- 级联方式添加外键 设置了级联更新
-- 注:写外键时易出错,出问题了细致一些多检察一下
-- alter table 表名 add constraint 外键名 foreign key (外键列名) references 主表名(主表主键名) on update cascade;
ALTER TABLE s1 ADD CONSTRAINT fk1 FOREIGN KEY (tid) REFERENCES t1(id) ON UPDATE CASCADE;
-- 给主表添加一个老师
DESC t1;
INSERT INTO t1(tname) VALUES('红');
-- 查看
SELECT * FROM t1;
SELECT * FROM s1;
-- 添加学生与红老师关联
-- 添加学生信息
INSERT INTO s1 VALUES(NULL,'李洛克',1);
-- 修改主表的id
-- 目前主表的红老师,已被关联,一般情况下,他不可改主键,不过。我们现在是级联的更新了。
UPDATE t1 SET id=6 WHERE tname='红';
-- 修改成功
-- 查看
SELECT * FROM t1;
SELECT * FROM s1;
-- 结果,与红老师相关联的学生实体中记录的tid值,也发生了改变
-- 小结
-- 级联更新
-- 如果给从表中的外键列设置了级联更新,当主表中主键发生变化后,会自动的去修改与它相关联的从表中的对应记录
-- 很方便