MySQL多重删除。是否可以多次删除引用的行?
如果我有一个父表和一个子表,是否可以在没有“ON delete CASCADE”约束的情况下多次删除其中的行 在本例中:MySQL多重删除。是否可以多次删除引用的行?,mysql,foreign-keys,cascading-deletes,sql-delete,Mysql,Foreign Keys,Cascading Deletes,Sql Delete,如果我有一个父表和一个子表,是否可以在没有“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中的行,是否不能执行类似操作-( 我想多行删除,但不设置“ONDELETECASCADE”
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中的行,是否不能执行类似操作-(
我想多行删除,但不设置“ON
DELETE
CASCADE”约束。我还需要使用WHERE
子句过滤DELETE
命令。这是可能的,还是我应该在multidelete中创建尽可能多的DELETE
s表?这是mysql文档页面的注释(http://dev.mysql.com/doc/refman/5.0/en/delete.html):
"如果您使用涉及InnoDB表的多表DELETE语句,并且这些表有外键约束,MySQL优化器可能会按照不同于其父/子关系的顺序处理表。在这种情况下,该语句会失败并回滚。相反,您应该从单个表中删除,并依赖于DELETEInnoDB提供的相应修改其他表的功能。”
因此,这意味着您被迫不使用多重删除选项
希望对您有所帮助。这是mysql文档页面的注释(http://dev.mysql.com/doc/refman/5.0/en/delete.html): ”如果您使用涉及InnoDB表的多表DELETE语句,并且这些表有外键约束,MySQL优化器可能会按照不同于其父/子关系的顺序处理表。在这种情况下,该语句会失败并回滚。相反,您应该从单个表中删除,并依赖于DELETEInnoDB提供的相应修改其他表的功能。” 因此,这意味着您被迫不使用多重删除选项
希望这有助于..我通过在DELETE命令中指定确切的连接顺序来解决优化器提示的问题:
delete a, b
from b
STRAIGHT_JOIN a on a.id = b.a_id
where a.id = ?;
由于优化器提示“直接连接”,MySQL将首先删除b行。我通过在DELETE命令中指定确切的连接顺序来解决优化器提示的问题:
delete a, b
from b
STRAIGHT_JOIN a on a.id = b.a_id
where a.id = ?;
由于优化器提示STRIGHT\u JOIN,MySQL将首先删除b行。您可以告诉优化器如何使用STRIGHT\u JOIN!之类的提示进行操作:-)您可以告诉优化器如何使用STRIGHT\u JOIN!:-)SET foreign\u key\u checks=0;删除SET foreign\u key\u checks=1;SET foreign\u key\u checks=0;删除SET foreign\u key\u checks=1;