在两个表的非常简单的情况下,MySQL 5.6.16 中的“无法添加外键约束”错误:为什么?

Dan*_*aum 2 mysql sql windows foreign-keys

这是我尝试执行的确切 SQL(在 Windows 上使用 SQLYog 作为 MySQL 客户端):

DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` INT (11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE = INNODB ;

DROP TABLE IF EXISTS `temp`;
CREATE TEMPORARY TABLE `temp` (
  dish_id INT (11) NOT NULL,
  user_id INT (11) NOT NULL,
  UNIQUE KEY (dish_id, user_id),
  FOREIGN KEY `test` (dish_id) REFERENCES test (id)
) ENGINE = INNODB ;
Run Code Online (Sandbox Code Playgroud)

这是尝试创建时收到的确切错误temp

Error Code: 1215
Cannot add foreign key constraint
Run Code Online (Sandbox Code Playgroud)

在我看来,一切都井井有条——两个相关密钥的数据类型和签名是相同的;这些名字似乎是犹太洁食;到底是怎么回事?

我究竟做错了什么?为什么无法创建外键约束?

Eva*_*ruz 5

这是因为您正在尝试向临时表添加外键约束。

从手册:

外键关系涉及一个包含中心数据值的父表,以及一个具有相同值的子表指向其父表。FOREIGN KEY 子句在子表中指定。父表和子表必须使用相同的存储引擎。它们不能是临时表。

http://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html

编辑:尝试使用永久表。有用。

DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` INT (11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE = INNODB ;

DROP TABLE IF EXISTS `temp`;
CREATE TABLE `temp` (
  dish_id INT (11) NOT NULL,
  user_id INT (11) NOT NULL,
  UNIQUE KEY (dish_id, user_id),
  FOREIGN KEY `test` (dish_id) REFERENCES test (id)
) ENGINE = INNODB ;
Run Code Online (Sandbox Code Playgroud)