簡體   English   中英

MySQL外鍵問題

[英]MySQL foreign key problem

我的一個客戶最近格式化了他的計算機,然后重新安裝了MySQL Server和我的應用程序。 他抱怨說,從主表中刪除記錄不會影響子表。 我要求他發送數據庫備份。 還原數據庫時,我發現表引擎已更改為MyISAM,而將它們設置為InnoDB。

我從子表中刪除了主表中不存在的記錄。 此后,當我不重新設置外鍵索引時,它會顯示錯誤:“外鍵約束失敗。錯誤1005”,有時還會出現錯誤:150。

我已經仔細檢查了主表或子表中可能剩余的行,但似乎沒有任何作用。

主表有兩列,它們共同構成一個主鍵。 這些列是:BillNo,BillDate。

請協助。

這是眾所周知的MySQL陷阱。 我本人幾次遇到這個問題。 他們可能在使用InnoDB時遇到了問題,並從備份還原了數據庫。 由於InnoDB無法正常工作,因此它只能使用MyISAM存儲引擎,該引擎不支持完整性約束(例如外鍵)。

基本上,問題在於,如果InnoDB引擎由於某種原因而無法啟動(通常是配置問題),則MySQL會默默地退回到MyISAM引擎。 即使您的陳述說:

CREATE TABLE () ENGINE=InnoDB

然后,如果InnoDB處於非活動狀態,MySQL將愉快地創建MyISAM表,甚至不會警告您。 再見數據完整性! :)

您可以運行SHOW ENGINES來查看哪些引擎處於活動狀態。 有關更多詳細信息,請參見此MySQL錯誤報告

  1. 檢查兩個表是否都使用InnoDB引擎。

  2. 檢查兩個字段是否具有相同的類型並對其進行索引。

http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html

如果重新創建已刪除的表,則該表必須具有符合引用該表的外鍵約束的定義。 如前所述,它必須具有正確的列名和類型,並且必須在引用的鍵上具有索引。 如果不滿足這些條件,MySQL將返回錯誤號1005,並在錯誤消息中引用錯誤150。

暫無
暫無

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

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