MySQL外键错误1452,当该键看起来正常时

MySQL外键错误1452,当该键看起来正常时,mysql,phpmyadmin,Mysql,Phpmyadmin,我正在使用phpMyAdmin。我删除了所有的表,并使用MySQLWorkbench的导出重新创建了它们(这在以前工作得很好)。 我用数据重新填充了某些表,但在这一个表上出现故障,原因是: #1452 - Cannot add or update a child row: a foreign key constraint fails (`col8_apps`.`companies`, CONSTRAINT `fk_companies_users1` FOREIGN KEY (`mainadm

我正在使用phpMyAdmin。我删除了所有的表,并使用MySQLWorkbench的导出重新创建了它们(这在以前工作得很好)。 我用数据重新填充了某些表,但在这一个表上出现故障,原因是:

 #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)
有关的表格结构—

公司:

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进行插入,它将允许我从下拉列表中选择mainadmin的用户ID,这样它就可以识别我正在使用的外键存在,但它仍然会给出上面的外键错误

有人知道这是什么原因吗

编辑: 运行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!
表肯定在那里,但我不知道.ibd文件是什么


编辑以解释为什么不重复另一个问题:我在下面添加了一个解决方案作为答案。(这是mySqlWorkbench的问题,而不是MySql(或派生版本))

好的,所以我已经解决了这个问题,问题是由于某种原因,“users”表的create语句末尾没有显式的
ENGINE=InnoDB

我不知道为什么它不再为一个特定的表放这个,但是将它添加到创建脚本解决了我的问题

为了完整起见,此问题显示了在MySQL Workbench中设置存储引擎的位置:


在我的模型中,它被设置为InnoDB,但它仍然没有包含在导出脚本中,我将它设置为其他值并将其设置回,神奇地它开始正常工作…

好的,所以我已经修复了它,问题在于,出于某种原因,“用户”表的create语句末尾没有明确的
ENGINE=InnoDB

我不知道为什么它不再为一个特定的表放这个,但是将它添加到创建脚本解决了我的问题

为了完整起见,此问题显示了在MySQL Workbench中设置存储引擎的位置:

在我的模型中,它被设置为InnoDB,但它仍然没有包含在导出脚本中,我将它设置为其他值并将其设置回原位,神奇地它开始正常工作…

同样的问题, 通过清空表并重试连接,解决了此问题。 显然,您需要外部键表为空

同样的问题, 通过清空表并重试连接,解决了此问题。
显然,您需要外部键表为空

您的companyid是自动递增的,因此您不需要显式插入值-您是否已经有companyid=1的行。否,该表为空,我尝试过显式添加或不添加该值,仍然不起作用您的companyid的可能重复项是自动递增的,因此您不需要显式插入值-您是否已经有companyid=1的行。否该表为空,我尝试过显式添加和不添加,仍然不起作用