当前位置: 首页 > news >正文

mysql 事务中如果有sql语句出错,会导致自动回滚吗?

CREATE TABLE `name` (

  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',

  `name` varchar(32) DEFAULT '' COMMENT '名称',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

情况1.执行下列操作, 

会发现新开窗口 去查询name表时,整个事务都会回滚掉。

情况2.执行下列操作,

会发现第一条语句成功了 。 

情况3.再执行下列操作

此时并没有commit , 但可以查到第一条执行成功的数据, 第二条语法错误的语句会被回滚。

上述是因为在手动提交模式下, MySQL事务管理中未显式提交时的回滚机制,核心逻辑基于事务的原子性、日志系统和自动提交模式。

一、事务的原子性保障

  1. 原子性原理
    事务被视为不可分割的最小操作单元,所有操作要么全部成功提交,要么全部失败回滚。

  2. 若事务未执行COMMIT,MySQL默认认为事务未完成,需撤销所有中间操作,确保数据库恢复到事务开始前的状态。

  3. 自动提交模式的影响

    • 默认自动提交‌:每条独立SQL语句作为一个事务自动提交。
    • 手动提交模式‌:通过SET autocommit=0关闭自动提交,此时需显式执行COMMITROLLBACK。若未提交且会话终止,MySQL自动触发回滚。

二、事务日志与回滚机制

  1. Undo日志的作用
    MySQL通过Undo日志记录事务执行前的数据状态。若未提交:

    • 所有已执行的SQL操作暂存于内存或临时空间,未写入数据文件。
    • 回滚时,根据Undo日志逆向执行操作,恢复数据到事务开始前的状态。
  2. 隐式回滚触发条件
    若发生以下情况,MySQL自动回滚未提交的事务:

    • 客户端连接异常中断(如崩溃或超时)。
    • 执行过程中出现错误(如语法错误、约束冲突等)。
    • 显式调用ROLLBACK命令

关键注意事项

  1. 隔离级别的影响
    不同隔离级别(如读已提交、可重复读)会影响事务间的可见性,但不改变未提交事务必然回滚的核心逻辑。
  2. 隐式提交的例外
    执行DDL语句(如CREATE TABLE)或开启新事务(BEGIN)会隐式提交当前未提交的事务。

 简单来说就是:

1、begin;  .....; commit;    方式下 , 触发隐式自动回滚的情况:语法错误、会话断连、客户端崩溃等, 没有手动commit 都会自动回滚未提交的事务。

2、手动rollback 未提交的事务, 也会触发回滚

3、但是执行主键冲突。 死锁等错误,不会回滚, 就算最后手动commit也不行

http://www.xdnf.cn/news/219997.html

相关文章:

  • 力扣刷题总表
  • 【Vue】 实现TodoList案例(待办事项)
  • Java高频面试之并发编程-10
  • C++之string
  • 如何在本地部署小智服务器:从源码到全模块运行的详细步骤
  • CA校验主辅小区配置及UE能力
  • 首发记忆行车方案与座舱智能管家,佑驾创新“抢跑”驾舱融合市场
  • 恒流恒压直流充电测试负载设计:构建精准化检测体系
  • 计算机基础:二进制基础14,二进制加法
  • 如何将二叉树展开为链表?两种Java实现方法对比
  • FPGA 38 ,FPGA 网络通信协议栈基础,ARP 协议深度解析与模块划分( ARP与以太网帧,以及ARP模块常用文件 )
  • 细说STM32单片机FreeRTOS互斥量及其编程实例
  • C# 导入EXCEL 报错外部表不是预期的格式错误指南方案
  • C++中的vector和list有什么区别?
  • Launcher3-实现家长管控-儿童模式-老人模式
  • 机器学习第四篇 线性回归-最小二乘法
  • 案例分享|20倍提效!水力设备电磁仿真的云端实战
  • DDoS攻击真的无解吗?
  • DeepClaude开源程序可以实现代码生成、创作诗句以及内容创作等功能
  • 详解大语言模型生态系统概念:lama,llama.cpp,HuggingFace 模型 ,GGUF,MLX,lm-studio,ollama这都是什么?
  • 【LaTex】3.8流程图绘制
  • Transformer数学推导——Q34 推导位置插值(Position Interpolation)在长文本外推中的误差上界
  • (02)Redis 的订阅发布Pub/Sub
  • Ubuntu上搭建python环境并安装第三方库
  • C语言教程(二十四):C 语言中递归的详解
  • cuda学习3: 全局线程id计算
  • 大语言模型能否替代心理治疗师的深度拓展研究:fou
  • 两数之和II-输入有序数组(中等)
  • 洛谷题解 | CF1979C Earning on Bets
  • DNA复制过程3D动画教学工具