如果查询使用多个连接,mysql事务会工作吗?

时间:2011-12-04 18:27:21

标签: php transactions mysqli

所以这就是......

//我开始交易 $ mysqli = new mysqli(...);

//开始交易 $ mysqli->自动提交(FALSE);

  • 这是一个具有自己的数据库连接的select prepared stmt
  • 这里是一个插件准备好的stmt,它有自己的数据库连接
  • 这是一个带有上述db conn
  • 的slect prepared stmt
  • 插入新的conn
  • 插入新的conn
  • 插入新的conn

如果每个准备好的查询都返回true,它将($ mysqli-> commit())else $ mysqli-> rollback

我不知道交易将自动提交的原因是什么

我已经完成了3个多重连接的事务,他们回滚了...这个没有...... mysql是否支持具有单个连接查询的事务?

解决了...如果来自不同表的查询是相互依赖的,就像我的情况一样,并且您需要强大的数据访问安全性,请为您打开的每个连接将autocommit设置为false,为每个失败的bussness逻辑设置var为false,如果任何失败,回滚每一组查询,否则comit evry查询... 是的,事务是按照连接执行的,当我说mysql做了一些多个conn事务的回滚时,还有一些管理回滚的东西

重新编辑:ofc这不会像普通交易那样工作......如果发生系统崩溃,数据将被存储,直到崩溃的那一刻

1 个答案:

答案 0 :(得分:6)

事务内的所有查询必须位于同一连接上。如果您有三个连接,则打开三个事务(假设它们未处于自动提交模式)。

如果您确实需要分布式事务,则必须使用MySQL's XA Transactions - 但如果您正在处理多个数据库中的事务(或者,某些其他非数据库事务)。