JSa*_*wer 8 mysql schema cascade sql-delete
我有一个使用类表继承的MySql架构,但我希望子表从父表和外表中进行级联删除.
create table parent (
_key bigint unsigned not null,
name varchar(64) unique not null,
primary key(_key)
);
create table child_a (
_key bigint unsigned not null,
foreign_key_a bigint unsigned not null,
foreign key(_key) references parent(_key) on delete cascade,
foreign key(foreign_key_a) references a(_key) on delete cascade,
primary key(_key)
);
create table child_b (
_key bigint unsigned not null,
foreign_key_b bigint unsigned not null,
foreign key(_key) references parent(_key) on delete cascade,
foreign key(foreign_key_b) references b(_key) on delete cascade,
primary key(_key)
);
Run Code Online (Sandbox Code Playgroud)
问题是当从其中一个外表删除记录时,它将从子表中删除记录,但不从父表中删除.我不想使用存储过程/多语句作为解决方案,因为外表有自己的级联删除,所以我也需要存储过程.
Art*_*rth 11
ON DELETE CASCADE当删除它所引用的表(父)中的行时,将使用外键(子)删除表中的行.如果没有ON DELETE CASCADE,带有外键(子)的行将指向不再存在的行(父),你会得到一个INTEGRITY CONSTRAINT VIOLATION.
反过来没有这样的问题,在不删除父节点的情况下删除子节点不会留下孤立的行,也不会INTEGRITY CONSTRAINT VIOLATION涉及到MySQL,也不需要级联.
如果您希望将子项,父项和其他引用行一起删除,则可以选择一些选项.
多语句/程序:
ON DELETE CASCADEs)ON DELETE CASCADEs)ON DELETE CASCADE父项参考)ON DELETE CASCADE另一个参考)触发器:
AFTER DELETE在子表上放置一个触发器,删除父记录和另一个记录(按任意顺序),然后删除子记录将清除所有三个记录(不需要ON DELETE CASCADEs)改变关系:
ON DELETE CASCADEs,则删除父行将清除子项和然后依次记录另一条记录.