MySQL的多删除。 是否可以多引用删除行?(MySQL Multi-Delete. Is it

2019-10-16 13:08发布

如果我有一个父表和子表,是有可能多删除其行,而不必一个“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`))

我想multidelete行,但不设定“ON DELETE CASCADE”的约束 。 此外,我需要过滤DELETE的命令WHERE子句。 这是可能的,或者我应该有使尽可能多的DELETE S作为在multidelete表?

Answer 1:

我解决了问题,优化提示,通过指定DELETE命令的确切连接顺序:

delete a, b
from b
STRAIGHT_JOIN a on a.id = b.a_id
where a.id = ?;

MySQL会删除B排灯首先得益于优化提示STRAIGHT_JOIN。



Answer 2:

这是从MySQL文档页面的说明(http://dev.mysql.com/doc/refman/5.0/en/delete.html):

“如果你使用多表删除包括针对有外键约束InnoDB表的语句,MySQL优化器可以处理在从他们的父/子关系不同的顺序表。在这种情况下,语句失败和卷回来了。相反,你应该从单一表中删除,并依靠ON DELETE InnoDB的提供对其它表进行相应的修改功能。”

因此,这意味着你被迫不要使用多删除选项!

希望帮助..



文章来源: MySQL Multi-Delete. Is it possible to multi-delete referenced rows?