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

为什么MySQL事务回滚不生效?含mysqli实现与phpMyAdmin测试场景

事务回滚未生效的原因

核心根因:表使用了不支持事务的存储引擎

  • MySQL仅InnoDB、Cluster等具备事务能力的存储引擎,能实现事务的原子性语义:事务内的写操作只有在收到COMMIT指令时才会永久落盘,收到ROLLBACK指令时会完全撤销之前的所有修改。
  • 你操作的User表如果是MyISAM、MEMORY这类无事务支持的存储引擎,所有写操作在执行完成后会立刻自动提交落盘,根本不会被外层事务包裹管控。哪怕你手动执行了START TRANSACTION、后续调用ROLLBACK,已经执行的UPDATE操作也无法被撤销,这和你观察到的「PHP代码里触发异常回滚、phpMyAdmin手动测试回滚都没撤销第一条UPDATE修改」的现象完全匹配。
  • 验证方式很简单:执行SHOW TABLE STATUS FROM 对应库名 WHERE Name = 'User',查看返回结果里的Engine字段值。如果显示为MyISAM,只需要执行ALTER TABLE User ENGINE = InnoDB把表转换为支持事务的引擎,回滚功能就会恢复正常。

其他可能导致同类问题的场景

  • 事务执行过程中混入了会触发隐式提交的操作(比如CREATE TABLE、ALTER TABLE、DROP TABLE这类DDL语句),这类语句会强制将当前未提交的事务直接持久化,后续的ROLLBACK无法撤销已经被隐式提交的修改。
  • 数据库连接中途断开:事务内的写操作还没来得及回滚,连接被强制释放,MySQL会自动提交当前已执行的写操作。

内容的提问来源于stack exchange,提问作者Jens Stuber

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 15:15:02