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 为空