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

&引用;无法添加外键约束";MySQL 5.6.16中的错误,在两个表的非常简单的情况下:为什么?,mysql,sql,windows,foreign-keys,Mysql,Sql,Windows,Foreign Keys,下面是我尝试执行的确切SQL(在Windows上使用SQLYG作为MySQL客户端): 以下是尝试创建temp时收到的确切错误: Error Code: 1215 Cannot add foreign key constraint 在我看来,一切都井然有序——两个相关键的数据类型和签名度是相同的;这些名字似乎是犹太教的;发生了什么事 我做错了什么?为什么无法创建外键约束?这是因为您试图将外键约束添加到临时表中 从手册中: 外键关系涉及一个包含 中心数据值,以及具有相同值的子表 回到它的父母身边

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

以下是尝试创建
temp
时收到的确切错误:

Error Code: 1215
Cannot add foreign key constraint
在我看来,一切都井然有序——两个相关键的数据类型和签名度是相同的;这些名字似乎是犹太教的;发生了什么事


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

这是因为您试图将外键约束添加到临时表中

从手册中:

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

编辑: 用一张永久的桌子试试。它起作用了

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 ;

你的意思是:
FOREIGN KEY`temp`(dish\u id)引用test(id)
?@Raptor这不应该有什么区别,因为它只是FK关系的名称,但我会试试…@Raptor。。。我收到了同样的错误(在做了你建议的更改之后)。你知道这是在哪个版本的MySQL中引入的吗?我复制的代码来自一个已知的工作web应用程序(使用MySQL 5.1.63)。它在文档中一直保留到5.0:我应该补充一点,据我记忆所及,5.0中还添加了InnoDB和外键支持。因此,看起来您永远无法将外键约束添加到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 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 ;