2014-07-02 33 views
0

我需要雙眼才能看到爲什麼我無法創建以下外鍵。找出Mysql上的FK創建錯誤

ALTER TABLE `DEFAULTS_OPTIONS` 
ADD CONSTRAINT `DEFAULTS_OPTIONS_ibfk_1` FOREIGN KEY (`univers_code`) REFERENCES `UNIVERSES` (`code`) ON DELETE CASCADE ON UPDATE CASCADE; 

這裏是表的說明involucrated:

CREATE TABLE `DEFAULTS_OPTIONS` (
`country_code` varchar(2) COLLATE utf8_unicode_ci NOT NULL, 
`univers_code` varchar(2) COLLATE utf8_unicode_ci NOT NULL, 
`element_code` varchar(3) COLLATE utf8_unicode_ci NOT NULL, 
`option_code` varchar(8) COLLATE utf8_unicode_ci NOT NULL, 
`element_category` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
PRIMARY KEY (`country_code`,`univers_code`,`element_code`,`option_code`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

CREATE TABLE `UNIVERSES` (
`country_code` varchar(2) COLLATE utf8_unicode_ci NOT NULL, 
`code` varchar(2) COLLATE utf8_unicode_ci NOT NULL, 
`description` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
`image` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
`order` tinyint(4) NOT NULL, 
PRIMARY KEY (`country_code`,`code`), 
CONSTRAINT `UNIVERSES_ibfk_1` FOREIGN KEY (`country_code`) REFERENCES `COUNTRY` (`id`) ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

,這是錯誤我得到:

Error Code: 1005. Can't create table 'DEV_DEV.#sql-aa2_2e1' (errno: 150) 

有誰看到我的錯誤?

預先感謝您的關注。

編輯:

Naktibalda勸我去檢查的

SHOW ENGINE INNODB STATUS 

結果來幫助找出原因。

回答

1

它失敗了,因爲您沒有UNIVERSES.code字段的索引 您的PRIMARY KEY對此並不好,因爲代碼不是PK中的第一個字段。

如果你想參考2個字段的組合, 使用

ALTER TABLE `DEFAULTS_OPTIONS` 
ADD CONSTRAINT `DEFAULTS_OPTIONS_ibfk_1` FOREIGN KEY (`country_code`, `univers_code`) REFERENCES `UNIVERSES` (`country_code`, `code`) ON DELETE CASCADE ON UPDATE CASCADE; 
1

要定義簡單,未結合外鍵,父列還必須建立索引。

看來UNIVERSES.code列未編入索引。

其更改如下

ALTER TABLE UNIVERSES ADD KEY (code); 

現在你可以在UNIVERSES.code列外鍵添加到DEFAULTS_OPTIONS表。