2

我想做一些类似的事情:

delete c.* from Club c
where c.id in(select club_id from ClubAttrValues where value='E5');

但是当我尝试这个时,我得到了错误

Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`foroige`.`clubattrvalues`, CONSTRAINT `FKAE90CBE9EE3B7895` FOREIGN KEY (`club_id`) REFERENCES `Club` (`id`))

有没有办法删除与Club价值ClubAttrValues为“E5”的每个俱乐部有关的所有内容。具有相同 club_id的多行,ClubAttrValues理想情况下都将被删除,并且 club_id 引用 id 中的 id Club

我曾尝试在 MySQL 工作台中设置 ON DELETE CASCADE,但即使这样似乎也没有什么区别。

俱乐部表如下所示:

+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| created   | datetime     | YES  |     | NULL    |                |
| deleted   | tinyint(1)   | NO   |     | NULL    |                |
| modified  | datetime     | YES  |     | NULL    |                |
| address1  | varchar(255) | NO   |     | NULL    |                |
| address2  | varchar(255) | YES  |     | NULL    |                |
| country   | varchar(255) | YES  |     | NULL    |                |
| county    | varchar(255) | NO   |     | NULL    |                |
| email     | varchar(255) | YES  |     | NULL    |                |
| fax       | varchar(255) | YES  |     | NULL    |                |
| mobile    | varchar(255) | YES  |     | NULL    |                |
| name      | varchar(255) | NO   |     | NULL    |                |
| postcode  | varchar(255) | YES  |     | NULL    |                |
| telephone | varchar(255) | YES  |     | NULL    |                |
| town      | varchar(255) | YES  |     | NULL    |                |
| type      | varchar(255) | NO   |     | NULL    |                |
| parent_id | bigint(20)   | YES  | MUL | NULL    |                |
| lft       | bigint(20)   | NO   |     | NULL    |                |
| rgt       | bigint(20)   | NO   |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+

和我的 ClubAttrValues 表:

+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| name    | varchar(255) | NO   |     | NULL    |                |
| value   | text         | YES  |     | NULL    |                |
| club_id | bigint(20)   | YES  | MUL | NULL    |                |
+---------+--------------+------+-----+---------+----------------+
4

2 回答 2

2

在删除之前尝试:

SET FOREIGN_KEY_CHECKS=0

完成后将其设置为 1。

于 2013-09-23T15:30:57.020 回答
0

当您on delete cascade为外键列设置然后

delete c
from Club c
inner join ClubAttrValues a on a.club_id = c.id
where a.value = 'E5'

请参阅此 SQLFiddle 演示

于 2013-09-23T15:24:13.180 回答