You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中仅执行BEGIN/START TRANSACTION是否真的启动事务?

问题解答:MySQL中BEGIN/START TRANSACTION是否真的启动事务?

仅执行BEGIN;或START TRANSACTION;确实会启动事务,但InnoDB采用「事务懒初始化」机制,导致你一开始在information_schema.innodb_trx中查不到记录,直到执行实际数据库操作后才会显示。

具体原因分析:

  • BEGIN/START TRANSACTION的作用是将当前会话标记为「事务模式」,但此时InnoDB不会立即为事务分配trx_id,也不会写入事务日志——因为还没有任何需要事务跟踪的实际操作(比如数据读写、快照生成)。
  • 当你执行SELECT * FROM person这类查询时,InnoDB需要为事务生成MVCC快照(保证事务隔离性),此时才会正式初始化事务资源,分配trx_id,并将事务信息写入innodb_trx表,所以后续查询就能看到记录。

验证小技巧:

即使执行一个无意义的只读查询,比如SELECT 1;,之后再查询innodb_trx,也会看到对应的事务记录——因为MVCC快照的生成触发了事务资源的初始化。

额外说明:

不要误以为innodb_trx中没有记录就代表事务没启动。比如在BEGIN后直接执行ROLLBACK;,操作会生效,说明会话确实处于事务上下文当中,只是InnoDB还没为其分配可见的事务ID而已。

内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:35:19