找出Mysql上的FK创建错误

时间:2014-07-02 09:19:54

标签: mysql foreign-keys foreign-key-relationship

我需要双眼才能知道为什么我无法创建以下外键。

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

帮助弄清楚原因。

2 个答案:

答案 0 :(得分: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 :(得分:1)

要定义简单的,未组合的外键,还必须为父列编制索引。

似乎UNIVERSES.code列没有编入索引。

更改如下

ALTER TABLE UNIVERSES ADD KEY ( code );

现在,您可以在DEFAULTS_OPTIONS列的UNIVERSES.code表格中添加外键。