2012-12-23 53 views
1

我想盡一切事情截斷表,但我總是有相同的消息:未能刪除或截斷表

Cannot delete or update a parent row: a foreign key constraint fails (`mybdd`.`c_member`, CONSTRAINT `fk_cm_c_id` FOREIGN KEY (`c_id`) REFERENCES `comment` (`c_id`)) 

尋找一些職位,在這個網站我試過這樣:

ALTER TABLE comment ADD CONSTRAINT c_member FOREIGN KEY(c_id) 參考文獻commentc_id);

但它好好嘗試一下工作:

無法創建表 'mybdd#SQL-2ee0_3769864。'(錯誤:150){ 「成功」:假的, 「錯誤」:」

1005 - 無法創建表'sameditrbdd。#sql-2ee0_3769864'(errno:150)</div>「}

我該怎麼做?

+0

您需要首先刪除您的mydd表以避免外鍵問題。 – sdespont

+0

您需要從'mybdd'表中刪除外鍵約束。 – Barmar

+0

是的,我刪除了桌子,但我仍然不工作 – Newben

回答

1

您可以使用:

SET foreign_key_checks = 0; 
DROP <your_table> 
SET foreign_key_checks = 1; 
+1

我不認爲這是一個好主意。某些mydd表格字段在您的建議後將不會鏈接到 – sdespont

+0

是的,它只是一種常規解決方案。通常你將不得不刪除限制alltogether這可能適合你更好 – Moseleyi

+0

我試過這個,但我被告知我有一個SQL語法錯誤... – Newben

2

您需要刪除的所有引用表,包括所有的外鍵約束和索引,然後才能刪除表。

外鍵約束還可以防止您刪除特定的行。

或者,您可以關閉外鍵檢查,但將其重新設置爲可能會導致錯誤或不可預知的行爲(因爲您的約束被數據庫中的數據所侵犯)。

+0

如何刪除對錶格的所有引用? – Newben

+0

@Newben - 您可以使用'ALTER TABLE DROP FOREIGN KEY ...'來刪除一個外部約束,即另一個表引用了您想要刪除的表中的某些內容。 (這必須是一個單獨的'ALTER TABLE'語句。)當然,您需要知道什麼約束引用了表中的任何內容。 –