Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL多重删除。是否可以多次删除引用的行?_Mysql_Foreign Keys_Cascading Deletes_Sql Delete - Fatal编程技术网

MySQL多重删除。是否可以多次删除引用的行?

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”

如果我有一个父表和一个子表,是否可以在没有“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中的行,是否不能执行类似操作-(


我想多行删除,但不设置“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;