【发布时间】:2013-11-05 21:01:55
【问题描述】:
我用过谷歌,我知道这个问题已经被问过很多次了。但我的问题是人们提供的解决方案对我不起作用。
问题是这个常见的问题: 我有两张表(exercise 和 typexerc)。在 exercise 中,我想添加一个引用 typexerc 的外键。
首先,我使用alter table 将列TYPEXERC_ID 添加到exercise,我没有收到任何错误。然后我也用alter table 添加外键,我得到了这个:
错误代码:1215。无法添加外键约束 0.374 秒
我执行show columns from exercise; 和show columns from typexerc; 来检查两列的数据类型是否相同(这是人们总是对这个问题给出的解决方案),并且在这两种情况下它们都是 smallint(6)。
接下来我尝试查看这些表是否使用不同的引擎完成(我使用图表中的正向工程完成了一个,另一个使用 SQL 手动完成)。为此,我做了一个show table status where name='exercise'; 和一个show table status where name='typexerc';,在这两种情况下,引擎都是 InnoDB 版本 10。
所以我不知道该怎么办。任何帮助,将不胜感激。顺便说一句,我完全是菜鸟。
TYPEXERC:
CREATE TABLE `typexerc` (
`TYPEXERC_ID` smallint(6) NOT NULL,
`TYPEXERC_NAME` varchar(25) NOT NULL,
PRIMARY KEY (`TYPEXERC_ID`),
UNIQUE KEY `TYPEXERC_ID` (`TYPEXERC_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
锻炼:
CREATE TABLE `exercise` (
`EXER_ID` int(11) NOT NULL,
`EXER_DATE` date NOT NULL,
`EXER_TIME` time NOT NULL,
`EXER_CAL` smallint(6) NOT NULL,
`TYPEXERC_ID` smallint(6) NOT NULL,
PRIMARY KEY (`EXER_ID`),
UNIQUE KEY `EXER_ID` (`EXER_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=' ';
现在我做到了:
ALTER TABLE exercise
ADD FOREIGN KEY(TYPEXERC_ID) references typexerc;
【问题讨论】:
-
tl;dr 只是发布表结构,而不是您的逐步指导您所做的事情。这根本没有帮助。
-
会不会是exercise中有一些记录在typeexerc中没有对应的条目?
-
您是否尝试过此问题的建议答案? stackoverflow.com/questions/15534977/…
-
@fancyPants 对此感到抱歉。我会放 SQL。
-
@SchmitzIT 这个答案适用于不同的数据类型。我检查了数据类型与显示列相同。
标签: mysql sql mysql-workbench