2017-07-15 52 views
0

對於某些上下文,我創建了一個不協調的JavaScript bot,並且我創建了一個大型數據庫,這樣我可以記錄許多不同的信息。MariaDB下的MySQL奇怪的外鍵錯誤

數據庫的這部分是用來讓我可以

  1. 存儲消息
  2. 存儲歷史信息,與每一個編輯
  3. 容易查找哪些用戶在這些歷史的消息中提到的。

我在arch linux下使用MariaDB和MySQL Workbench。 Here's the relevant part of the database design, done on dbdesigner.net. 問題發生在最左邊的表格。

這是我的錯誤信息:

收於線158執行腳本錯誤1005(HY000):無法創建 表test#sql-1bb_6(錯誤:150「外鍵約束 格式不正確」)操作失敗,退出碼1

所以我知道那裏像158是我的外鍵的問題,但我不能發現問題。

ALTER TABLE `messageContentHistoryMentions` 
    ADD CONSTRAINT `messageContentHistoryMentions_fk1` 
     FOREIGN KEY (`messageContentCount`) REFERENCES `messageContentHistory`(`messageContentCount`); 

讓我疑惑的部分是,158的格式與第156行完全相同,只有不同的字段。下面的156行:

ALTER TABLE `messageContentHistoryMentions` 
    ADD CONSTRAINT `messageContentHistoryMentions_fk0` 
     FOREIGN KEY (`messageID`) REFERENCES `messageContentHistory`(`messageID`); 

你或許可以理解爲什麼我很困惑。
一些更多的信息:

  • 這是一個新的安裝MariaDB的,這樣承擔違約
  • InnoDB的是正在使用
  • 這些表都utf8mb4_unicode_ci
  • 國外的雙方的排序規則引擎鍵是主鍵,是整數,長度爲8,默認值爲0.

謝謝。
編輯:這是不是重複的,而錯誤是相似的,它是在情況很不同

+0

150往往意味着約束被在錯誤的順序應用。 –

+0

請參見[mysql外鍵約束錯誤地形成錯誤](https://stackoverflow.com/questions/8434518/mysql-foreign-key-constraint-is-incorrectly-formed-error) – joanolo

+0

[mysql外鍵約束錯誤地形成錯誤](https://stackoverflow.com/questions/8434518/mysql-foreign-key-constraint-is-incorrectly-formed-error) – joanolo

回答

0

被引用的表,你的情況messageContentHistory,必須有一個索引,其中引用的列,你的情況messageContentCount ,列爲第一個列(按給定順序)。根據模式,messageContentCount是主鍵的一部分,但不是第一部分。 messageID主鍵的最左邊部分,這就是爲什麼它適用於它。

嘗試添加上messageContentCount另一個指標:

ALTER TABLE messageContentHistory ADD KEY (messageContentCount); 

應該以後的工作。

或者,如果它適合您的目的,您可以添加一個外鍵(messageID,messageContentCount),而不是兩個單獨的。它也應該工作,因爲在這種情況下,條件將得到滿足。

MariaDB KB for foreign keys(有趣的部分是在子表中的列必須是一個索引...

+0

非常感謝!我用你的建議(messageID,messageContentCount)。這解決了第158行的問題,後來在第164行發現了相同的錯誤。 – Sobeston