如果我有一个父表和一个子表,是否可以在没有“ON DELETE CASCADE”约束的情况下多次删除其中的行?
在这个例子中:
create table a(id int primary key);
create table b(id int primary key, a_id int,
constraint fkb foreign key (a_id) references a(id));
难道不能为了删除表a和b中的行而做这样的事情吗? :-(
delete a, b
from b
inner join a on a.id = b.a_id
where a.id = ?;
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails
(`erasmusu6`.`b`, CONSTRAINT `fkb` FOREIGN KEY (`a_id`) REFERENCES `a` (`id`))
我想多行删除但不设置“ON DELETE
CASCADE”约束。我还需要使用 WHERE
子句过滤 DELETE
命令。这是可能的还是我必须创建与 multidelete 中的表一样多的 DELETE
?
最佳答案
我通过在 DELETE 命令中指定确切的连接顺序,使用优化器提示解决了这个问题:
delete a, b
from b
STRAIGHT_JOIN a on a.id = b.a_id
where a.id = ?;
由于优化器提示 STRAIGHT_JOIN,MySQL 将首先删除 b 行。
关于MySQL 多删除。是否可以多次删除引用的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7017798/