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

MySQL事务执行遇错误未回滚,为何第一条插入仍生效?

问题原因解析

出现这种情况的核心是数据库对事务中错误的处理逻辑,具体可以从这几点来看:

  • 错误类型决定事务走向:你第二条语句的错误是引用了不存在的brak字段,这类属于单条语句的执行错误,而非会直接摧毁整个事务的致命错误。像MySQL这类数据库遇到这种情况时,只会终止当前出错的语句,不会自动回滚之前已经执行成功的操作,第一条insert的结果依然留在事务中。
  • commit命令的作用:你最后执行了commit,数据库会把事务里所有执行成功的操作都提交到磁盘。第一条插入已经完成且没出错,自然就被永久保存到表中了。
  • 不同数据库的行为差异:比如PostgreSQL在事务中出现错误后,整个事务会进入“不可用”状态,这时执行commit会直接失败;但MySQL的InnoDB引擎默认不会自动回滚非致命错误的事务,必须手动执行rollback才能撤销之前的操作。

如果想实现“一条出错就全回滚”的效果,要么调整数据库配置(比如MySQL开启innodb_strict_mode),要么在代码里捕获错误后主动调用rollback,而不是继续执行commit。

内容的提问来源于stack exchange,提问作者rene smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:52:07