嘗試刪除所有數據並將AUTOMATIC_INCREMENT重置爲0,以便我有一個乾淨的數據庫可以使用。發現了一個截斷功能應該允許我做以上但它拋出回這個錯誤.... 不能截斷外鍵約束MySQL截斷錯誤
(`film`.`reviewed`, CONSTRAINT `reviewed_ibfk_1` FOREIGN KEY (`movie_id`) REFERENCES `film`.`films` (`movie_id`))
引用的表難道這意味着我不得不刪除外國關鍵?
嘗試刪除所有數據並將AUTOMATIC_INCREMENT重置爲0,以便我有一個乾淨的數據庫可以使用。發現了一個截斷功能應該允許我做以上但它拋出回這個錯誤.... 不能截斷外鍵約束MySQL截斷錯誤
(`film`.`reviewed`, CONSTRAINT `reviewed_ibfk_1` FOREIGN KEY (`movie_id`) REFERENCES `film`.`films` (`movie_id`))
引用的表難道這意味着我不得不刪除外國關鍵?
是的,你不能截斷有外鍵約束的表,它
由於每docs: -
TRUNCATE TABLE爲一個InnoDB表失敗,如果有任何外國KEY 來自引用表的其他表的約束。外部密鑰 允許在同一個表的列之間進行約束。
雖然你有替代這樣做: -
SET FOREIGN_KEY_CHECKS=0;
TRUNCATE table1;
SET FOREIGN_KEY_CHECKS=1;
可以截斷與外鍵約束的表;我一直這樣做。但是你必須以正確的順序來滿足約束條件。
如果您有兩個表,TABLEB具有引用TABLEA的FK約束,那麼您必須首先對TABLE進行TRUNCATE TABLEB操作,然後再對TABLEA進行操作。
需要明確的是,如果TABLEB包括約束
CONSTRAINT `xid_fk` FOREIGN KEY (`xid_fk`) REFERENCES `TABLEA` (`id`)
,那麼你不能首先截斷TABLEA,因爲這會造成在TABLEB懸掛引用。但是,如果首先截斷TABLEB,則可以無誤地截斷TABLEA。
我不推薦這種方法,因爲您可能會遺留一些懸掛引用。如果你尊重你的FK限制,並以正確的順序截斷表格,你會更好。看到我對這個問題的回答。 –
@DMac: - 這是正確的,但我剛剛提供了一個替代方案。我確實提到過「**你不能截斷有外鍵約束的表**」 –