我需要双眼睛看看为什么我不能创建下面的外键。
ALTER TABLE `DEFAULTS_OPTIONS`
ADD CONSTRAINT `DEFAULTS_OPTIONS_ibfk_1` FOREIGN KEY (`univers_code`) REFERENCES `UNIVERSES` (`code`) ON DELETE CASCADE ON UPDATE CASCADE;以下是所涉及的表格的说明:
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来帮助找出原因。
发布于 2014-07-02 09:30:12
它失败了,因为您没有UNIVERSES.code字段的索引,您的主键对此不好,因为代码不是PK中的第一个字段。
如果要引用两个字段的组合,请使用
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;发布于 2014-07-02 09:47:46
若要定义简单、未组合的外键,还必须对父列进行索引。
UNIVERSES.code列似乎没有索引。
将其更改为::
ALTER TABLE UNIVERSES ADD KEY ( code );现在,您可以在DEFAULTS_OPTIONS列上向UNIVERSES.code表添加外键。
https://stackoverflow.com/questions/24527335
复制相似问题