MySQL 外键错误 1452,当键看起来正常时
MySQL foreign key error 1452 when the key appears to be ok
我正在使用 phpMyAdmin。我已经删除了所有 tables 并使用从 MySQLWorkbench 导出的内容重新创建了它们(这在以前工作得很好)。
我已经用数据重新填充了某些 tables,但是在这个 table 上失败了:
#1452 - Cannot add or update a child row: a foreign key constraint fails
(`col8_apps`.`companies`, CONSTRAINT `fk_companies_users1` FOREIGN KEY (`mainadmin`)
REFERENCES `users` (`userid`) ON DELETE NO ACTION ON UPDATE NO ACTION)
相关的table结构-
公司:
companyid int(10) UNSIGNED AUTO_INCREMENT
client int(10) UNSIGNED
name varchar(150)
mainadmin int(10) UNSIGNED
....
用户:
userid int(10) UNSIGNED AUTO_INCREMENT
....
我在users中有一个userid=1的用户
我正在尝试 运行 这个 SQL:
INSERT INTO companies (companyid, client, name, mainadmin, companylogo, active)
VALUES (1,1,'Company One', 1, 'default',1);
如果我使用 phpMyAdmin 进行插入,它会让我 select 来自下拉列表的用户 ID - 所以它识别出我正在使用的外键存在 - 对于 mainadmin 但它仍然给我上面的外键错误。
有人知道是什么原因造成的吗?
编辑:
运行 SHOW ENGINE INNODB STATUS 给出了这条奇怪的信息:
Trying to add to index `fk_companies_users1_idx` tuple:
DATA TUPLE: 2 fields;
0: len 4; hex 00000001; asc ;;
1: len 4; hex 00000001; asc ;;
But the parent table `col8_apps`.`users`
or its .ibd file does not currently exist!
肯定有 table,但我不知道 .ibd 文件是什么?
编辑以解释为什么不重复另一个问题:我在下面添加了一个解决方案作为答案。 (这是 mySqlWorkbench 的问题,而不是 MySql(或派生))
好的,所以我已经解决了这个问题,问题是由于某种原因 'users' table 在其创建语句的末尾没有明确的 ENGINE = InnoDB
。
我不知道为什么它停止为那个特定的 table 放置它,但是将它添加到创建脚本解决了我的问题。
为了完整起见,这个问题显示了在 MySQL Workbench 中设置存储引擎的位置:
MySQL Workbench EER Diagramm - how to change storage engine?
这在我的模型中被设置为 InnoDB,但它仍然没有包含在导出脚本中,我将它设置为其他东西并重新设置,神奇地它开始正常工作...
同样的问题,
通过清空 table 并重试连接解决了这个问题。
显然你需要外键 table 为空
我正在使用 phpMyAdmin。我已经删除了所有 tables 并使用从 MySQLWorkbench 导出的内容重新创建了它们(这在以前工作得很好)。 我已经用数据重新填充了某些 tables,但是在这个 table 上失败了:
#1452 - Cannot add or update a child row: a foreign key constraint fails
(`col8_apps`.`companies`, CONSTRAINT `fk_companies_users1` FOREIGN KEY (`mainadmin`)
REFERENCES `users` (`userid`) ON DELETE NO ACTION ON UPDATE NO ACTION)
相关的table结构-
公司:
companyid int(10) UNSIGNED AUTO_INCREMENT
client int(10) UNSIGNED
name varchar(150)
mainadmin int(10) UNSIGNED
....
用户:
userid int(10) UNSIGNED AUTO_INCREMENT
....
我在users中有一个userid=1的用户
我正在尝试 运行 这个 SQL:
INSERT INTO companies (companyid, client, name, mainadmin, companylogo, active)
VALUES (1,1,'Company One', 1, 'default',1);
如果我使用 phpMyAdmin 进行插入,它会让我 select 来自下拉列表的用户 ID - 所以它识别出我正在使用的外键存在 - 对于 mainadmin 但它仍然给我上面的外键错误。
有人知道是什么原因造成的吗?
编辑: 运行 SHOW ENGINE INNODB STATUS 给出了这条奇怪的信息:
Trying to add to index `fk_companies_users1_idx` tuple:
DATA TUPLE: 2 fields;
0: len 4; hex 00000001; asc ;;
1: len 4; hex 00000001; asc ;;
But the parent table `col8_apps`.`users`
or its .ibd file does not currently exist!
肯定有 table,但我不知道 .ibd 文件是什么?
编辑以解释为什么不重复另一个问题:我在下面添加了一个解决方案作为答案。 (这是 mySqlWorkbench 的问题,而不是 MySql(或派生))
好的,所以我已经解决了这个问题,问题是由于某种原因 'users' table 在其创建语句的末尾没有明确的 ENGINE = InnoDB
。
我不知道为什么它停止为那个特定的 table 放置它,但是将它添加到创建脚本解决了我的问题。
为了完整起见,这个问题显示了在 MySQL Workbench 中设置存储引擎的位置: MySQL Workbench EER Diagramm - how to change storage engine?
这在我的模型中被设置为 InnoDB,但它仍然没有包含在导出脚本中,我将它设置为其他东西并重新设置,神奇地它开始正常工作...
同样的问题, 通过清空 table 并重试连接解决了这个问题。 显然你需要外键 table 为空