首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算Mysql上的FK创建错误

问计算Mysql上的FK创建错误
EN

Stack Overflow用户
提问于 2014-07-02 09:19:54
回答 2查看 21关注 0票数 0

我需要双眼睛看看为什么我不能创建下面的外键。

代码语言:javascript
复制
ALTER TABLE `DEFAULTS_OPTIONS`
ADD CONSTRAINT `DEFAULTS_OPTIONS_ibfk_1` FOREIGN KEY (`univers_code`) REFERENCES `UNIVERSES` (`code`) ON DELETE CASCADE ON UPDATE CASCADE;

以下是所涉及的表格的说明:

代码语言:javascript
复制
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;

这就是我遇到的错误:

代码语言:javascript
复制
Error Code: 1005. Can't create table 'DEV_DEV.#sql-aa2_2e1' (errno: 150)

有人看到我的错误了吗?

提前谢谢你看一看。

编辑:

Naktibalda建议我检查

代码语言:javascript
复制
SHOW ENGINE INNODB STATUS

来帮助找出原因。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-02 09:30:12

它失败了,因为您没有UNIVERSES.code字段的索引,您的主键对此不好,因为代码不是PK中的第一个字段。

如果要引用两个字段的组合,请使用

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-07-02 09:47:46

若要定义简单、未组合的外键,还必须对父列进行索引。

UNIVERSES.code列似乎没有索引。

将其更改为::

代码语言:javascript
复制
ALTER TABLE UNIVERSES ADD KEY ( code );

现在,您可以在DEFAULTS_OPTIONS列上向UNIVERSES.code表添加外键。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24527335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档