【问题标题】:Can't figure out why I can't add a foreign key constraint无法弄清楚为什么我不能添加外键约束
【发布时间】:2013-11-05 21:01:55
【问题描述】:

我用过谷歌,我知道这个问题已经被问过很多次了。但我的问题是人们提供的解决方案对我不起作用。

问题是这个常见的问题: 我有两张表(exercisetypexerc)。在 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


【解决方案1】:

嗯,你的说法是错误的。您缺少要引用的列。

ALTER TABLE exercise
ADD FOREIGN KEY(TYPEXERC_ID) references typexerc(typexerc_id);
  • sqlfiddle 中实时查看它的工作情况。

【讨论】:

  • 不敢相信这么简单。好吧,就像我说的我是菜鸟。感谢您的时间,并感谢所有试图提供帮助的人。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
相关资源
最近更新 更多