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

Posted

技术标签:

【中文标题】如果查询使用多个连接,mysql 事务会起作用吗?【英文标题】:Will a mysql transaction work if multiple connections are used for the queries? 【发布时间】:2012-01-12 17:39:54 【问题描述】:

所以这里...

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

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

这是一个带有自己的数据库连接的 select 准备好的 stmt 这是一个带有自己的数据库连接的插入准备好的 stmt 这是一个带有上述 db conn 的 slect 准备好的 stmt 插入新的连接 插入新的连接 插入新的连接

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

我不知道该事务会自动提交的原因是什么

我已经用 3 个多连接完成了一些事务,它们回滚了……这个没有…… mysql 是否支持具有单个连接查询的事务?

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

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

【问题讨论】:

您的示例缺少事务的开始。它需要先启动。 【参考方案1】:

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

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

【讨论】:

是的逻辑答案......无论如何,mysql处理事务的方式很奇怪......告诉你一些事务在多个连接上工作(测试,回滚和提交工作正常),具体查询是默认自动提交(true)...当我阅读更多关于 mysql 事务的信息时,当你在实际事务中插入/删除/更新时,它甚至很重要

以上是关于如果查询使用多个连接,mysql 事务会起作用吗?的主要内容,如果未能解决你的问题,请参考以下文章

mysql中date_sub索引会起作用吗

如果应用程序使用任务管理器关闭,c# 表单关闭事件会起作用吗?

如果用户关闭应用程序的通知,静默推送通知会起作用吗?

如果关系上没有索引,SQL 查询是不是会起作用?

MySql binlog 可以有多个打开的事务吗?

node.js mysql 池 beginTransaction & 连接