所以我继承了一个大型 c++ 代码库,它做了很多 mysql 工作。 该代码始终禁用自动提交,并且往往具有如下所示的功能:
int function() {
if(mysql_real_query(conn, ...)) {
return -1;
}
if(mysql_real_query(conn, ...)) {
return -1;
}
mysql_commit(conn);
return 0;
}
显然,这里的意图是只有在查询成功时才会提交。但是,如果其中一个不是,会发生什么?最终,mysql 连接正确关闭,但代码中没有回滚。
那么当它关闭时,它基本上会提交任何成功的更改吗?还是会像什么都没发生一样回滚?
我的直觉说,如果第二个查询失败以“撤消”成功的第一个查询,则进行回滚是有意义的。所以这个函数最终是事务性的。
当然,我发现这段代码本质上是被破坏的,因为如果以前的一些工作失败,以后其他 mysql 代码可能会执行提交,从而使事情处于“奇怪”状态。但是在我去改变程序的行为之前,我想确保我理解当前的行为是什么。