我試圖從多個表中刪除。下面是我的表像從具有外部約束的多個表中刪除
A_has_B ---- B ---- C_has_B
(many to many) (many to many)
我試圖刪除A_has_B,B和C_has_B所有行給定的記錄中,我使用MySQL與用於A_has_B定義的外鍵InnoDB存儲引擎B的ID和C_has_B引用的ID在B.
我想履行我刪除像這樣:
DELETE A_has_B.*, C_has_B.*, B.*
FROM
A
join
B
on (B.B_id = A.B_id)
join
C
on (C.B_id = B.B_id)
where B.B_id IN(1,2, 4);
的問題是,當我執行查詢,MySQL的抱怨:
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`db`.`C`, CONSTRAINT `fk_C` FOREIGN KEY (`B_id`) REFERENCES `B` (`B_id`) ON DELETE NO ACTION ON UPDATE NO)
我該如何解決這個問題?
感謝您的回答:)用一條語句刪除絕對不可能?我會想,也許我可以強制MySQL在從B刪除前從交叉表中刪除。 – F21
在SQL中,它的'transactional'性質是爲了允許多個語句完成* as-if *它們是單個語句。而不是實現一個不可能的複雜語言和一個不可能的複雜引擎/優化器。所以,如果一切都被「一次」刪除很重要,那麼看看交易:) – MatBailie