Mysql

MySQL 無法創建外鍵,錯誤 1005、150

  • February 9, 2015

我正在嘗試向 MySQL InnoDB 表添加外鍵,將 aBIGINT與同一數據庫中的錶鍊接起來。我正在使用 MySQL Workbench 來執行此操作。它生成一個腳本:

ALTER TABLE `MyDatabase`.`MyTable` 
 ADD CONSTRAINT `myNewForeignKey`
 FOREIGN KEY (`TheId` )
 REFERENCES `MyDatabase`.`MyReferencedTable` (`id` )
 ON DELETE NO ACTION
 ON UPDATE NO ACTION
, ADD INDEX `myNewForeignKey_idx` (`TheId` ASC) ;

申請時我得到:

ERROR 1005: Can't create table 'MyDatabase.#sql-1ab6_5c3df97' (errno: 150)
ERROR: Error when running failback script. Details follow.
ERROR 1050: Table 'MyReferencedTable' already exists

我什至嘗試刪除表格(可以這樣做,因為它是空的)並使用外鍵和所有內容重新創建它,但它會導致相同的錯誤。

我已經看到了與此相關的錯誤報告,但它們已經有好幾年了,現在應該已經修復了。當然必須可以添加外鍵。我究竟做錯了什麼?

我混淆了我的數據庫並錯誤地認為我正在使用 InnoDB 數據庫。原來其中之一是 MyISAM,然後外鍵不起作用。不幸的是,MySQL Workbench 不會在 Windows 上通知使用者這一點,但它會在 Macintosh 版本上通知使用者。(我想在你的團隊中有使用 Mac 的開發人員畢竟是件好事。)

希望這可以幫助有相同錯誤消息的人。

如果有人在 phpmyadmin 中遇到此問題,可能是因為您在一個欄位上有多個相同的約束。有時會發生這種情況。

檢查 SHOW CREATE TABLE 以獲得所有約束。如果您發現重複項,請刪除其中一個。

然後,在 phpMyAdmin 中,您可能需要從頭開始為該表設置所有約束。因此,通過 phpmyadmin 為該表擦除並重新創建所有 FK。

然後,它應該可以工作。

引用自:https://dba.stackexchange.com/questions/43131