簡體   English   中英

無法刪除表:外鍵約束失敗

[英]Can't drop table: A foreign key constraint fails

在 MySQL 中,我想刪除一個表。
我嘗試了很多東西,但我不斷收到無法刪除名為bericht的表的錯誤。 這是我得到的錯誤:

#1217 - 無法刪除或更新父行:外鍵約束失敗

怎么放下這張桌子?

這應該可以解決問題:

SET FOREIGN_KEY_CHECKS=0; DROP TABLE bericht; SET FOREIGN_KEY_CHECKS=1;

正如其他人指出的那樣,這幾乎從來都不是您想要的,即使這是問題中提出的問題。 一個更安全的解決方案是刪除依賴於表bericht刪除之前bericht 有關如何執行此操作,請參閱 CloudyMarble 答案。 當我不想或無法刪除和重新創建數據庫本身時,我使用 bash 和我帖子中的方法刪除數據庫中的所有表。

當其他表對您嘗試刪除的表具有外鍵約束並且您正在使用 InnoDB 數據庫引擎時,會發生#1217錯誤。 此解決方案暫時禁用檢查約束,然后重新啟用它們。 閱讀文檔了解更多信息。 請務必根據bericht刪除表中的外鍵限制和字段,否則可能會使數據庫處於損壞狀態。

試試這個:

SELECT * 
FROM information_schema.KEY_COLUMN_USAGE 
WHERE REFERENCED_TABLE_NAME = 'YourTable';

這應該為您提供哪些表具有對您要刪除的表的引用,一旦刪除這些引用,或者引用此表中的數據集的數據集,您將能夠刪除該表

使用show create table tbl_name查看外鍵

您可以使用以下語法刪除外鍵:

ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol

這里還有更多信息(參見 Frank Vanderhallen 帖子): http : //dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

但幸運的是,使用 MySQL FOREIGN_KEY_CHECKS 變量,您完全不必擔心 DROP TABLE 語句的順序,您可以按照您喜歡的任何順序編寫它們——甚至完全相反——就像這樣:

SET FOREIGN_KEY_CHECKS = 0;
drop table if exists customers;
drop table if exists orders;
drop table if exists order_details;
SET FOREIGN_KEY_CHECKS = 1;

如需更多說明,請查看以下鏈接:

http://alvinalexander.com/blog/post/mysql/drop-mysql-tables-in-any-order-foreign-keys/

這可能與其他模式具有相同的表,這就是您收到該錯誤的原因。

您需要先刪除子行,然后再刪除父行。

我意識到這已經過時了一段時間並且已經選擇了答案,但是允許外鍵為NULL然后選擇ON DELETE SET NULL的替代方法如何。

基本上,你的表應該像這樣改變:

ALTER TABLE 'bericht' DROP FOREIGN KEY 'your_foreign_key';

ALTER TABLE 'bericht' ADD CONSTRAINT 'your_foreign_key' FOREIGN KEY ('column_foreign_key') REFERENCES 'other_table' ('column_parent_key') ON UPDATE CASCADE ON DELETE SET NULL;

我個人建議同時使用“ON UPDATE CASCADE”和“ON DELETE SET NULL”以避免不必要的並發症,但是您的設置可能會規定不同的方法。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM