2013-10-11 184 views
2

嘗試刪除所有數據並將AUTOMATIC_INCREMENT重置爲0,以便我有一個乾淨的數據庫可以使用。發現了一個截斷功能應該允許我做以上但它拋出回這個錯誤.... 不能截斷外鍵約束MySQL截斷錯誤

(`film`.`reviewed`, CONSTRAINT `reviewed_ibfk_1` FOREIGN KEY (`movie_id`) REFERENCES `film`.`films` (`movie_id`)) 

引用的表難道這意味着我不得不刪除外國關鍵?

回答

2

是的,你不能截斷有外鍵約束的表,它

由於每docs: -

TRUNCATE TABLE爲一個InnoDB表失敗,如果有任何外國KEY 來自引用表的其他表的約束。外部密鑰 允許在同一個表的列之間進行約束。

雖然你有替代這樣做: -

SET FOREIGN_KEY_CHECKS=0; 
TRUNCATE table1; 
SET FOREIGN_KEY_CHECKS=1; 
+0

我不推薦這種方法,因爲您可能會遺留一些懸掛引用。如果你尊重你的FK限制,並以正確的順序截斷表格,你會更好。看到我對這個問題的回答。 –

+0

@DMac: - 這是正確的,但我剛剛提供了一個替代方案。我確實提到過「**你不能截斷有外鍵約束的表**」 –

0

可以截斷與外鍵約束的表;我一直這樣做。但是你必須以正確的順序來滿足約束條件。

如果您有兩個表,TABLEB具有引用TABLEA的FK約束,那麼您必須首先對TABLE進行TRUNCATE TABLEB操作,然後再對TABLEA進行操作。

需要明確的是,如果TABLEB包括約束

CONSTRAINT `xid_fk` FOREIGN KEY (`xid_fk`) REFERENCES `TABLEA` (`id`) 

,那麼你不能首先截斷TABLEA,因爲這會造成在TABLEB懸掛引用。但是,如果首先截斷TABLEB,則可以無誤地截斷TABLEA。