我想按照以下方式做点什么:
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'。 ClubAttrValues
中有多个行具有相同的club_id,理想情况下会删除所有行,而Club
中的club_id引用ID。
我已尝试在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 | |
+---------+--------------+------+-----+---------+----------------+
答案 0 :(得分:2)
在删除之前尝试:
SET FOREIGN_KEY_CHECKS=0
完成后将其设置为1。
答案 1 :(得分:0)
当您为外键列设置on delete cascade
然后
delete c
from Club c
inner join ClubAttrValues a on a.club_id = c.id
where a.value = 'E5'