无法在MySQL数据库中添加外键

时间:2017-03-16 17:23:30

标签: mysql database sequelpro

尝试在两个表中的两个字段之间创建一个简单的关系 - '任务'带有字段的表格' USER_TOKEN'和“用户”#39;桌子上的字段' TOKEN'。这两个字段是相同的结构。正如您可以看到错误和其他可能有助于您了解问题并解决问题的事情。

  

系统:MacOS 10.12.3 | DB:MySQL 5.7.17 | DBM:Sequel Pro

     

错误:MySQL说:无法添加外键约束

CREATE TABLE `TASK` (
  `ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `USER_TOKEN` int(11) unsigned NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `USER` (
  `ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `TOKEN` int(11) unsigned NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE USER
ADD CONSTRAINT TOKENS
FOREIGN KEY (`TOKEN`) REFERENCES `category`(`USER_TOKEN`)

感谢。

1 个答案:

答案 0 :(得分:-1)

如果您确实要为非主键创建外键,则必须是对其具有unique约束的列。

  

FOREIGN KEY约束不必仅链接到另一个表中的PRIMARY KEY约束;它也可以定义为引用另一个表中UNIQUE约束的列。

因此,USER_TOKEN表的TASK列和TOKEN列的USER列必须为UNIQUE。因此,请运行以下查询:

CREATE TABLE `TASK` (
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`USER_TOKEN` int(11) unsigned NOT NULL UNIQUE,
 PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `USER` (
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`TOKEN` int(11) unsigned NOT NULL UNIQUE,
 PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


ALTER TABLE `USER`
ADD CONSTRAINT `TOKENS`
FOREIGN KEY (`TOKEN`) REFERENCES `TASK`(`USER_TOKEN`);

检查Demo here