如果多个连接用于查询,mysql事务是否工作?


Will a mysql transaction work if multiple connections are used for the queries?

就是这样。

//启动事务$mysqli = new mysqli(…);

//启动事务mysqli ->自动提交(假);

  • 这里是一个select准备的stmt,它有自己的db连接
  • 下面是一个插入准备的stmt,它有自己的db连接
  • 下面是一个select准备的stmt,上面的db conn
  • 插入新的conn
  • 插入新的conn
  • 插入新的conn

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

我不知道为什么事务会自动提交

我已经做了一些事务与3多个连接,他们回滚…这个不……mysql是否支持具有单个连接查询的事务?

解决……如果来自不同表的查询是相互依赖的,就像我的情况一样,你需要强大的数据访问安全性,为你打开的每个连接设置autocommit为false,为每个失败的业务逻辑设置var为false,如果有任何失败,回滚每组查询,否则提交每个查询……是的,事务是每个连接执行的,当我说mysql为一些多个conn事务执行回滚时,有其他东西管理回滚

重新编辑:ofc这不会像正常交易一样工作…在系统崩溃的情况下,数据将被存储到崩溃的那一刻

事务中的所有查询必须在同一连接上。如果你有三个连接,你有三个事务打开(假设它们不是自动提交模式)。

如果你真的需要分布式事务,你将不得不使用MySQL的XA事务——但是只有当你在多个数据库中处理事务(或者,其他一些非数据库事务)时才需要。