我的PHP代码中有两个MySQL查询。
基本上我需要执行两个查询(它们是两个INSERT)查询,两者都必须成功。例如,如果query1成功但query2不成功;我需要回滚query1,因为两个查询都必须成功。
我正在使用MyISAM而且我知道我不能做回滚等但是有什么方法可以解决我的问题(另一种解决方案)来做我想做的事情吗?
它们彼此依赖,因为query1存储来自表单的数据,query2将一些其他细节插入另一个表(它基本上是一个计数器),用于跟踪引用系统的总计数。
答案 0 :(得分:3)
一种选择是将所插入记录的ID存储在第一个表中。如果第二个查询失败,请使用删除查询删除第一个查询插入的记录。 我建议你把引擎更改为InnoDB,这样你就可以使用交易了。或者您是否有特定原因使用MyISAM(如全文搜索?)
答案 1 :(得分:3)
第一次插入后,您可以使用mysql_insert_id()获取ID并存储它。
然后,当您执行第二个查询时,也获取该ID。如果ID为null,则表示它不成功,并且您已获得旧ID,因此您可以删除它,如此
DELETE FROM table WHERE id='$insertId'
修改强>
请注意,这不是一个完整的解决方案,唯一真正的方法是转换为InnoDB
答案 2 :(得分:1)
听起来像你需要交易。
它们允许您在单个事务中回滚整个系列的数据库修改。
答案 3 :(得分:1)
交易是的答案。如果您选择的存储引擎不支持它们,并且您有这种情况,那么您可能选择了错误的存储引擎。