我有3张桌子:
带有列的AAA :
id | text
BBB 列(aaa_id
)是上表中的外键=> id
- AAA ):
id | text | aaa_id
和 CCC 的列(bbb_id
是上表中的外键=> id
- BBB ):
id | text | bbb_id
现在,当我从表格 AAA 中删除记录时,我想删除表格 BBB 中aaa_id = AAA.id
的所有记录,并删除所有记录表 CCC 中的记录连接到我要从 BBB 中删除的记录(因此它们的bbb_id
等于BBB.id
aaa_id
等于AAA.id
)的记录。
我尝试过使用内连接,但我没有运气。同时,我用PHP选择所有记录并分别删除它们。
表格是MyISAM。
答案 0 :(得分:3)
DELETE AAA, BBB, CCC
FROM AAA
LEFT JOIN BBB ON BBB.aaa_id = AAA.id
LEFT JOIN CCC ON CCC.bbb_id = BBB.id
如果每个表中始终有子记录,您也可以使用INNER JOIN。或者,您可以在外键约束中设置ON DELETE CASCADE。
答案 1 :(得分:1)
您正在寻找ON DELETE CASCADE
选项。
CASCADE:从父表中删除或更新行,并自动删除或更新子表中的匹配行。支持ON DELETE CASCADE和ON UPDATE CASCADE。在两个表之间,不要定义几个ON UPDATE CASCADE子句,这些子句作用于父表或子表中的同一列。
答案 2 :(得分:1)
如果要从另一个表中删除相关行,则必须使用支持外键的表引擎。
然后将ON DELETE
操作设置为CASCADE
可在此处找到更多文档:http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
答案 3 :(得分:1)
当您从父表中删除所有子行时,将使用on delete cascade
创建外键
答案 4 :(得分:0)
外键约束为ON DELETE CASCADE
当你创建表时遵循以下示例的语法,
CREATE TABLE `table2` (
`id` int(11) NOT NULL auto_increment,
`name` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `ids` (`ids`)
CONSTRAINT `foreign` FOREIGN KEY (`ids`)
REFERENCES `table2` (`ids`) ON DELETE CASCADE ON UPDATE CASCADE
)
注意:你需要使用InnoDB存储引擎,他默认MyISAM存储引擎不支持外键关系。
否则使用内部联接进行删除