3

我正在从 MYSQL 中的两个表中删除选定的行,这两个表都有外键。

DELETE d,b
  FROM A as b
  INNER JOIN B as d on b.bid=d.bid WHERE b.name LIKE '%xxxx%';

即使我试图从两个表中删除,MYSQL 也会抱怨外键:

Error: Cannot delete or update a parent row: a foreign key constraint
fails (`yyy/d`, CONSTRAINT `fk_d_bid` FOREIGN KEY (`bid`) REFERENCES 
`b` (`bid`) ON DELETE NO ACTION ON UPDATE NO ACTION)

从两个表中删除的最佳解决方案是什么?

4

2 回答 2

6

将此约束更改为使用ON DELETE CASCADE-- 这意味着如果删除了一行,那么任何“子”行也将被自动删除。

当然要小心使用 CASCADE —— 只在必要时使用它。如果您对它过于热心,并且不小心做了一个适当的 DELETE,它最终可能会删除一半的数据库。:)

请参阅有关外键约束的文档

于 2010-05-05T00:47:19.160 回答
0

我想我明白你在做什么

如果您不能更改表结构,那么您可以使用 2 个语句,第一个带有子选择

从 B where bid IN 中删除(从 A where name like '%xxxx%' 中选择出价);

从 A 中删除,其中名称如 '%xxxx%';

于 2010-05-05T00:50:14.813 回答