Mysql实现级联操作(级联更新、级联删除)

骑猪看日落 2023-03-13 11:46 26阅读 0赞

一、首先创建两张表stu,sc

复制代码

  1. create table stu(
  2. sid int UNSIGNED primary key auto_increment,
  3. name varchar(20) not null)
  4. TYPE=InnoDB charset=utf8;
  5. create table sc(
  6. scid int UNSIGNED primary key auto_increment,
  7. sid int UNSIGNED not null,
  8. score varchar(20) default '0',
  9. index (sid), --外键必须加索引
  10. FOREIGN KEY (sid) REFERENCES stu(sid) ON DELETE CASCADE ON UPDATE CASCADE)
  11. TYPE=InnoDB charset=utf8;

复制代码

format_png

--说明: 外键必须建立索引;

FOREIGN key(sid) 设置外键,把sid设为外键

REFERENCES stu(sid) 引用作用。引用stu表中的sid

ON DELETE CASCADE 级联删除
ON UPDATE CASCADE 级联更新

二、向两张表插入数据

复制代码

  1. insert into stu (name) value ('zxf');
  2. insert into stu (name) value ('ls');
  3. insert into stu (name) value ('zs');
  4. insert into stu (name) value ('ww');
  5. insert into sc(sid,score) values ('1','98');
  6. insert into sc(sid,score) values ('1','98');
  7. insert into sc(sid,score) values ('2','34');
  8. insert into sc(sid,score) values ('2','98');
  9. insert into sc(sid,score) values ('2','98');
  10. insert into sc(sid,score) values ('3','56');
  11. insert into sc(sid,score) values ('4','78');
  12. insert into sc(sid,score) values ('4','98');

复制代码

format_png 1

注意:在sc表中插入数据时,若插入的sid为22,则会插入失败,违反外键约束,因为外键sid
来自stu表中的id的主键,即stu中的id没有等于22的数据。

级联删除:将stu表中id为2的学生删除,该学生在sc表中的成绩也会级联删除

  1. delete from stu where sid = '2';

format_png 2

级联更新:stu表中id为3的学生更改为id为6,该学生在sc表中的对应id也会级联更新

  1. update stu set sid=6 where sid='3';

format_png 3

注意

删除表的时候必须先删除外键表(sc),再删除主键表(stu)

format_png 4

上图为违反外键约束,不能删除

format_png 5

上图为正常删除,先删除sc表,再删除stu表!

——现在的努力,只为小时候吹过的牛逼! ——

分类: 技术问题

发表评论

表情:
评论列表 (有 0 条评论,26人围观)

还没有评论,来说两句吧...

相关阅读