gpt4 book ai didi

mysql多对多删除级联留下孤儿

转载 作者:行者123 更新时间:2023-11-29 20:51:57 26 4
gpt4 key购买 nike

世界!

当我在多对多关系中级联删除记录时,我遇到了孤儿。这是我的 sql 代码(对于 mysql):

DROP TABLE IF EXISTS skTable;
DROP TABLE IF EXISTS studentTable;
DROP TABLE IF EXISTS kTable;
DROP TABLE IF EXISTS classTable;

create table if not exists classTable (id int primary key) ENGINE=INNODB;
insert into classTable values(1);
insert into classTable values(2);

create table if not exists studentTable (id int primary key, classID int, CONSTRAINT FOREIGN KEY (classID) REFERENCES classTable(id) ON DELETE CASCADE) ENGINE=INNODB;
insert into studentTable values(1, 1);
insert into studentTable values(2, 2);

create table if not exists kTable (id int primary key) ENGINE=INNODB;
insert into kTable values(1);
insert into kTable values(2);
insert into kTable values(3);

create table if not exists skTable (id int primary key, studentID int, CONSTRAINT FOREIGN KEY(studentID) REFERENCES studentTable(id) on delete cascade, kID int, CONSTRAINT FOREIGN KEY(kID) REFERENCES kTable(id) on delete cascade) ENGINE=INNODB;
insert into skTable values(1,1,1);
insert into skTable values(2,2,2);
insert into skTable values(3,2,3);
insert into skTable values(4,1,2);

DELETE FROM classTable WHERE id=2;

我的期望是获得这些记录:

类表,1条记录:

    id=1

学生表,1条记录:

    id=1, classID=1

kTable,2条记录:

    id=1
id=2

sk表,2条记录:

    id=1, studentID=1, kID=1
id=4, studentID=1, kID=2

问题是最后kTable有多余的记录

    id=3

这是孤儿。

有什么想法吗?谢谢。升

最佳答案

在您的示例中,skTablestudentTablekTable 的子项。 studentTableclassTable 的子项。对于外键ON DELETE CASCADE,如果您在父表中删除,则子表数据将被删除。但反之亦然是不可能的。这就是为什么,当您删除 classTable 中的数据时,studentTable 数据也会被删除,并且由于 studentTableskTable 中的数据被删除code> 数据被删除,但 kTable 数据未被删除。

关于mysql多对多删除级联留下孤儿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37968136/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com