Mysql
MySQL 無法創建外鍵,錯誤 1005、150
我正在嘗試向 MySQL InnoDB 表添加外鍵,將 a
BIGINT
與同一數據庫中的錶鍊接起來。我正在使用 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。
然後,它應該可以工作。