簡體   English   中英

在MySQL中添加外鍵失敗(錯誤150)

[英]Adding Foreign Key Fails in MySQL (errno 150)

在嘗試添加外鍵copnstraint時,我已經閱讀了很多關於接收MySQL errno 150的帖子,但是我還沒有找到解決方案。 我希望我不做一些愚蠢的事情。 我做了一個簡單的測試用例。

  1. 兩個表都是InnoDB。
  2. 兩個表都是UTF-8。
  3. 兩列都是int(11)無符號(使color_id NOT NULL沒有區別)。 編輯:我對此錯了,這就是解決方案

    這是我的兩個表:

表格widgets

CREATE TABLE `widgets` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL DEFAULT '',
`color_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

colors

CREATE TABLE `colors` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(10) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我剛剛創建了這些表,沒有內容。 當我嘗試添加外鍵約束以將widgets.color_id鏈接到colors.id時,會發生以下情況:

mysql> ALTER TABLE `widgets` ADD FOREIGN KEY (`color_id`) REFERENCES `color` (`id`);

ERROR 1005 (HY000): Can't create table 'production.#sql-7b1_2dd7' (errno: 150)

我只是補充一點,我無法使用我選擇的GUI工具 - 在OSX上的Sequel Pro - 或者。 嘗試創建外鍵關系時,我收到相同的錯誤消息。

SHOW ENGINE INNODB STATUS返回:

130531 17:23:06 Error in foreign key constraint of table production/#sql-7b1_2c80: 
FOREIGN KEY (`color_id`) REFERENCES `colors` (`id`): Cannot find an index in 
the referenced table where the referenced columns appear as the first columns, 
or column types in the table and the referenced table do not match for constraint.

我做了一些可笑的傻事嗎?

color_id不是unsigned並且具有DEFAULT NULL 列類型必須相同。

它幾乎總是主鍵和外鍵之間類型不匹配的情況。

在大多數情況下可以提供一些幫助:

  • 檢查您想要關聯的區域是否使用支持InnoDB之類的外鍵的引擎
  • 檢查列是否具有相同的類型和空白。 例如(2列必須匹配類型,類型大小和符號)
  • 檢查目標列是否具有索引或主鍵。

暫無
暫無

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

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