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

标签 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中的行而做这样的事情吗? :-(

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/

相关文章:

mysql - 按逗号分隔字符串中的单词分组

mysql - SQL 错误 : #1005 - Can't create table

Sails.js/Waterline 多对多关联的级联删除

java - sql中删除的困惑

java - 即使启用全部级联后,也无法从具有子记录的父表中删除记录

PHP使用文件夹/图片名称中的参数制作图片数组

mysql - 有很多属性的表

java - MySQL 数据库连接不工作

sql-server - 在表之间设置外键时是否可以忽略varchar长度?

php - 在 MySQL 中创建外键