-- Remove all connections from A which reference
-- the B-rows you want to remove
DELETE FROM A_has_B
WHERE B_id IN (1,2,4);
-- Remove all connections from C which reference
-- the B-rows you want to remove
DELETE FROM C_has_B
WHERE B_id IN (1,2,4);
-- Finally remove the B-rows
DELETE FROM B
WHERE B_id IN (1,2,4);
MysqL还允许您在一条语句中从多个表中删除。但是无法控制删除的顺序。从手册:
如果您使用涉及具有外键约束的InnoDB表的多表DELETE语句,则MysqL优化器可能以与其父/子关系不同的顺序处理表。在这种情况下,该语句将失败并回滚。相反,您应该从单个表中删除,并依靠InnoDB提供的ON DELETE功能来相应地修改其他表。