MySQL外键问题
我的一个客户最近格式化了他的机器,并重新安装了MySQL服务器和我的应用程序。他抱怨说从主表中删除记录不会影响子表。我要求他发送数据库的备份。当我恢复数据库时,我发现表引擎已更改为MyISAM,而它们被设置为InnoDB 我从子表中删除了主表中缺少的记录。之后,当我没有重新设置外键索引时,它会显示错误:“外键约束失败。错误1005”,有时还会显示错误:150 我仔细检查了主表或子表中可能保留的行,但似乎没有任何效果 主表有两列,它们组合形成一个主键。列为:BillNo、BillDateMySQL外键问题,mysql,constraints,innodb,myisam,Mysql,Constraints,Innodb,Myisam,我的一个客户最近格式化了他的机器,并重新安装了MySQL服务器和我的应用程序。他抱怨说从主表中删除记录不会影响子表。我要求他发送数据库的备份。当我恢复数据库时,我发现表引擎已更改为MyISAM,而它们被设置为InnoDB 我从子表中删除了主表中缺少的记录。之后,当我没有重新设置外键索引时,它会显示错误:“外键约束失败。错误1005”,有时还会显示错误:150 我仔细检查了主表或子表中可能保留的行,但似乎没有任何效果 主表有两列,它们组合形成一个主键。列为:BillNo、BillDate 请协助。
请协助。这是众所周知的MySQL陷阱;我自己也遇到过几次这个问题。他们可能在InnoDB上遇到了一些问题,并从备份中恢复了数据库。由于InnoDB无法工作,它只能求助于MyISAM存储引擎,该引擎不支持完整性约束(如外键) 基本上,问题在于,如果InnoDB引擎由于任何原因(通常是配置问题)无法启动,那么MySQL会悄悄地返回MyISAM引擎。即使你的声明说:
CREATE TABLE () ENGINE=InnoDB
然后,如果InnoDB不处于活动状态,MySQL将愉快地创建一个MyISAM表,甚至不会警告您。再见数据完整性!:)
您可以运行SHOW ENGINES
,查看哪些发动机处于活动状态。有关更多详细信息,请参阅