MySQL事务中途断开后,未提交事务会自动回滚吗?
- 内容介绍
- 文章标签
- 相关推荐
本文共计764个文字,预计阅读时间需要4分钟。
在MySQL中,若设置`autocommit`为`0`,则事务需通过执行`COMMIT`或`ROLLBACK`来手动提交或回滚。当客户端连接丢失(如客户端崩溃、网络中断、超时断开等)时,MySQL服务端会主动清理该连接所持有的所有未提交的更改。这不是事务超时机制,而是连接生命周期管理的一部分。
哪些断开场景会触发自动回滚?
关键判断依据是:MySQL 是否还持有该连接的会话上下文。以下情况会触发回滚:
- 客户端进程被 kill(如
kill -9)或意外退出 - TCP 连接因网络故障静默中断(无 FIN 包)
-
wait_timeout或interactive_timeout超时(默认 28800 秒),连接空闲超时后被服务端主动关闭 - MySQL 服务重启(所有活跃连接中断,未提交事务全部丢弃)
注意:KILL CONNECTION <id> 命令也会立即终止连接并回滚未提交事务;但 KILL QUERY <id> 只中断当前语句,不终止连接,事务仍保持打开状态。
本文共计764个文字,预计阅读时间需要4分钟。
在MySQL中,若设置`autocommit`为`0`,则事务需通过执行`COMMIT`或`ROLLBACK`来手动提交或回滚。当客户端连接丢失(如客户端崩溃、网络中断、超时断开等)时,MySQL服务端会主动清理该连接所持有的所有未提交的更改。这不是事务超时机制,而是连接生命周期管理的一部分。
哪些断开场景会触发自动回滚?
关键判断依据是:MySQL 是否还持有该连接的会话上下文。以下情况会触发回滚:
- 客户端进程被 kill(如
kill -9)或意外退出 - TCP 连接因网络故障静默中断(无 FIN 包)
-
wait_timeout或interactive_timeout超时(默认 28800 秒),连接空闲超时后被服务端主动关闭 - MySQL 服务重启(所有活跃连接中断,未提交事务全部丢弃)
注意:KILL CONNECTION <id> 命令也会立即终止连接并回滚未提交事务;但 KILL QUERY <id> 只中断当前语句,不终止连接,事务仍保持打开状态。

