3 回答

TA貢獻1828條經驗 獲得超3個贊
錯誤代碼:1005 - 代碼中的主鍵引用錯誤
通常是由于引用的外鍵字段不存在??赡苁悄阌幸粋€拼寫錯誤,或者檢查它應該是相同的,或者是字段類型不匹配。外鍵鏈接字段必須與定義完全匹配。
一些已知的原因可能是:
兩個關鍵字段類型和/或大小不完全匹配。例如,如果一個是
INT(10)
關鍵字段需要INT(10)
也是,而不是INT(11)
或TINYINT
。您可能需要確認字段大小,SHOW
CREATE
TABLE
因為查詢瀏覽器有時會直觀地顯示INTEGER
兩者INT(10)
和INT(11)
。你還應該檢查一個不是SIGNED
,另一個是UNSIGNED
。它們都需要完全相同。您嘗試引用的關鍵字段之一沒有索引和/或不是主鍵。如果關系中的某個字段不是主鍵,則必須為該字段創建索引。
外鍵名稱是已存在鍵的副本。檢查外鍵的名稱在數據庫中是否唯一。只需在密鑰名稱的末尾添加一些隨機字符即可對其進行測試。
您的一個或兩個表是一個
MyISAM
表。為了使用外鍵,表必須都是InnoDB
。(實際上,如果兩個表都是,MyISAM
那么您將不會收到錯誤消息 - 它只是不會創建密鑰。)在查詢瀏覽器中,您可以指定表類型。您已指定級聯
ON
DELETE
SET
NULL
,但相關鍵字段設置為NOT
NULL
。您可以通過更改級聯或將字段設置為允許NULL
值來解決此問題。確保Charset和Collate選項在表級別以及關鍵列的單個字段級別都相同。
外鍵列上有一個默認值(即默認值= 0)
關系中的一個字段是組合(復合)鍵的一部分,并且沒有自己的單獨索引。即使該字段具有索引作為復合鍵的一部分,您也必須僅為該鍵字段創建單獨的索引,以便在約束中使用它。
您的
ALTER
語句中存在語法錯誤,或者您在關系中輸入了一個字段名稱外鍵的名稱超過64個字符的最大長度。

TA貢獻1818條經驗 獲得超8個贊
將數據庫從一個服務器導出到另一個服務器時,也可能發生這種情況,默認情況下,這些表按字母順序列出。
因此,您的第一個表可能具有另一個尚未創建的表的外鍵。在這種情況下,請禁用foreign_key_checks并創建數據庫。
只需將以下內容添加到腳本中:
SET FOREIGN_KEY_CHECKS=0;
它應該工作。

TA貢獻2037條經驗 獲得超6個贊
有時它是由于主表被刪除(可能是通過禁用foreign_key_checks),但外鍵CONSTRAINT仍然存在于其他表中。在我的情況下,我放棄了桌子并嘗試重新創建它,但它給我帶來了同樣的錯誤。
因此,嘗試從所有表中刪除所有外鍵CONSTRAINT(如果有),然后更新或創建表。
添加回答
舉報