Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL外键问题_Mysql_Constraints_Innodb_Myisam - Fatal编程技术网

MySQL外键问题

MySQL外键问题,mysql,constraints,innodb,myisam,Mysql,Constraints,Innodb,Myisam,我的一个客户最近格式化了他的机器,并重新安装了MySQL服务器和我的应用程序。他抱怨说从主表中删除记录不会影响子表。我要求他发送数据库的备份。当我恢复数据库时,我发现表引擎已更改为MyISAM,而它们被设置为InnoDB 我从子表中删除了主表中缺少的记录。之后,当我没有重新设置外键索引时,它会显示错误:“外键约束失败。错误1005”,有时还会显示错误:150 我仔细检查了主表或子表中可能保留的行,但似乎没有任何效果 主表有两列,它们组合形成一个主键。列为:BillNo、BillDate 请协助。

我的一个客户最近格式化了他的机器,并重新安装了MySQL服务器和我的应用程序。他抱怨说从主表中删除记录不会影响子表。我要求他发送数据库的备份。当我恢复数据库时,我发现表引擎已更改为MyISAM,而它们被设置为InnoDB

我从子表中删除了主表中缺少的记录。之后,当我没有重新设置外键索引时,它会显示错误:“外键约束失败。错误1005”,有时还会显示错误:150

我仔细检查了主表或子表中可能保留的行,但似乎没有任何效果

主表有两列,它们组合形成一个主键。列为:BillNo、BillDate


请协助。

这是众所周知的MySQL陷阱;我自己也遇到过几次这个问题。他们可能在InnoDB上遇到了一些问题,并从备份中恢复了数据库。由于InnoDB无法工作,它只能求助于MyISAM存储引擎,该引擎不支持完整性约束(如外键)

基本上,问题在于,如果InnoDB引擎由于任何原因(通常是配置问题)无法启动,那么MySQL会悄悄地返回MyISAM引擎。即使你的声明说:

CREATE TABLE () ENGINE=InnoDB
然后,如果InnoDB不处于活动状态,MySQL将愉快地创建一个MyISAM表,甚至不会警告您。再见数据完整性!:)

您可以运行
SHOW ENGINES
,查看哪些发动机处于活动状态。有关更多详细信息,请参阅

  • 检查两个表是否都使用InnoDB引擎

  • 检查两个字段是否属于同一类型,并且是否已编制索引

  • 发件人:

    如果重新创建一个 如果已删除,则必须有定义 这符合外键 引用它的约束。它必须 具有正确的列名和类型, 而且它必须在 参考键,如前所述。如果 这些都不满意,MySQL返回 错误号1005,指的是错误 在错误消息中输入150