php – 外键约束失败,因为insert语句尚未提交(MySQL)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 外键约束失败,因为insert语句尚未提交(MySQL),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1639字,纯文字阅读大概需要3分钟。
内容图文
![php – 外键约束失败,因为insert语句尚未提交(MySQL)](/upload/InfoBanner/zyjiaocheng/902/ff93bb0f50744d669d3efa42430ca56c.jpg)
我有一个使用Doctrine 2的PHP脚本,它主要执行以下操作:
$entityManager->transactional(function($em) {
$foreignObject = new DoctrineEntities\ForeignTable();
$em->persist($foreignObject);
$em->flush();
$aObject = new DoctrineEntities\A();
$aObject->ForeignID = $foreignObject->ID;
$em->persist($aObject);
$em->flush();
});
我收到了完整性约束违规:
a foreign key constraint fails (dbName.A, CONSTRAINT A_ForeignID FOREIGN KEY (ForeignID) REFERENCES
ForeignTable
(ID
) ON DELETE NO ACTION ON UPDATE NO ACTION)
我的猜测是在提交之前检查约束,并且它不会检查我所做的尚未提交的插入是否可以使约束通过而不是失败.但我确实希望这两个插入语句包含在同一个事务中.那我该怎么办?
UPDATE
我移动了$em-> persist($aObject); $EM->冲洗();退出交易,我仍然得到同样的错误.显然,我的猜测是错误的…但后来我真的不知道是什么导致错误.
SQL上下文
表A.
CREATE TABLE `A` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`ForeignID` int(11) NOT NULL,
PRIMARY KEY (`ID`),
KEY `A_ForeignID` (`ForeignID`),
CONSTRAINT `A_ForeignID` FOREIGN KEY (`ForeignID`) REFERENCES `ForeignTable` (`ID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci
表ForeignTable
CREATE TABLE `ForeignTable` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci
解决方法:
我建议阅读关于MySQL数据完整性和FKs,然后Doctrine associations,MySQL检查InnodDB表的数据完整性.你做的不对,它应该是
$entityManager->transactional(function($em) {
$foreignObject = new DoctrineEntities\ForeignTable();
$em->persist($foreignObject);
$aObject = new DoctrineEntities\A();
$aObject->setForeign($foreignObject);
$em->persist($aObject);
$em->flush();
});
内容总结
以上是互联网集市为您收集整理的php – 外键约束失败,因为insert语句尚未提交(MySQL)全部内容,希望文章能够帮你解决php – 外键约束失败,因为insert语句尚未提交(MySQL)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。