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

【MySQL8】事务

一、事务简介

1. 什么是事务

事务是一组 DML 操作的集合,是不可分割的最小工作单元。 事务会将集合内所有操作作为整体向数据库提交 / 撤销,集合内操作要么同时全部成功,要么同时全部失败

2. 事务默认规则

MySQL 默认自动提交事务:执行一条 DML 语句就自动提交一次事务。 如果业务中途出现异常,需要手动回滚事务,保证数据一致性。

3. 事务标准执行流程

plaintext

开启事务 → 执行步骤1 → 执行步骤2 → 执行步骤3 → 无异常提交事务 / 出现异常回滚事务

二、事务实操:转账案例

1. 数据准备 SQL

sql

-- 创建账户表 create table account( id int auto_increment primary key comment '主键ID', name varchar(10) comment '姓名', money int comment '余额' ) comment '账户表'; -- 初始化测试数据:张三、李四各2000元 insert into account(id, name, money) VALUES (null,'张三',2000),(null,'李四',2000); -- 恢复测试数据(每次测试前重置余额) update account set money = 2000 where name = '张三' or name = '李四';

2. 转账业务需求

张三给李四转账 1000 元,分 3 步:

  1. 查询张三账户余额
  2. 张三余额减少 1000
  3. 李四余额增加 1000
2.1 无事务控制(存在数据安全隐患)

如果第二步执行后程序抛出异常,第三条更新语句不会执行,会出现张三钱减少、李四钱未增加的数据错乱。

sql

-- 1. 查询张三账户余额 select * from account where name = '张三'; -- 2. 将张三账户余额-1000 update account set money = money - 1000 where name = '张三'; -- 模拟程序异常,中断代码执行 -- 程序抛出异常 -- 3. 将李四账户余额+1000(异常后不会执行) update account set money = money + 1000 where name = '李四';
2.2 手动开启事务完整示例

sql

-- 开启事务 START TRANSACTION; -- 1. 查询张三账户余额 select * from account where name = '张三'; -- 2. 张三扣1000 update account set money = money - 1000 where name = '张三'; -- 模拟程序异常 -- 程序抛出异常 -- 3. 李四加1000 update account set money = money + 1000 where name = '李四'; -- 无异常则提交事务,永久生效 COMMIT; -- 出现异常则回滚事务,所有操作全部撤销 ROLLBACK;

三、事务两种控制方式

方式 1:修改自动提交参数(@@autocommit)

  1. 查看当前自动提交状态

sql

SELECT @@autocommit; -- 返回1:开启自动提交(MySQL默认) -- 返回0:关闭自动提交
  1. 关闭自动提交(后续 DML 需要手动 commit)

sql

SET @@autocommit = 0;
  1. 手动提交 / 回滚

sql

COMMIT; -- 提交事务,数据永久保存 ROLLBACK;-- 回滚事务,撤销所有未提交操作

方式 2:START TRANSACTION显式开启事务

推荐业务开发使用,仅当前代码块生效,不修改全局自动提交配置

sql

-- 开启事务 START TRANSACTION; -- 业务DML操作... COMMIT; -- 正常提交 ROLLBACK;-- 异常回滚

四、事务四大特性 ACID

  1. 原子性(Atomicity)事务是不可分割的最小操作单元,内部操作要么全部成功,要么全部失败。
  2. 一致性(Consistency)事务执行前后,数据库整体数据约束保持一致(转账总金额不变)。
  3. 隔离性(Isolation)并发执行的多个事务之间互相隔离,互不干扰。
  4. 持久性(Durability)事务一旦执行COMMIT提交,对数据的修改永久保存到磁盘,宕机也不会丢失;回滚则完全撤销修改。

五、并发事务三大问题

多事务同时操作同一张表时,会出现三类数据问题,由隔离级别控制解决:

  1. 脏读一个事务读到了另一个事务未提交的修改数据。若对方事务回滚,读到的数据就是无效脏数据。
  2. 不可重复读同一个事务内,两次读取同一行数据,中间被其他事务修改并提交,两次查询结果不一致。
  3. 幻读同一个事务内,按条件查询无数据,插入数据时报主键冲突;因为其他事务已插入同条件数据,像出现 “幻影” 行。

六、事务四大隔离级别

隔离级别从低到高,隔离性越强,并发性能越低,安全性越高。

表格

隔离级别脏读不可重复读幻读
READ UNCOMMITTED(读未提交)存在存在存在
READ COMMITTED(读已提交)解决存在存在
REPEATABLE READ(可重复读,MySQL 默认)解决解决存在
SERIALIZABLE(串行化)解决解决解决

1. 查看当前事务隔离级别

sql

SELECT @@TRANSACTION_ISOLATION;

2. 设置事务隔离级别语法

sql

-- SESSION:仅当前会话生效;GLOBAL:全局所有客户端永久生效 SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

3. 各隔离级别设置示例

sql

-- 1. 读未提交(允许脏读) set session transaction isolation level read uncommitted; -- 2. 读已提交(解决脏读,Oracle默认) set session transaction isolation level read committed; -- 3. 可重复读(MySQL InnoDB默认,解决脏读、不可重复读) set session transaction isolation level repeatable read; -- 4. 串行化(最高安全,性能最差,完全串行执行) set session transaction isolation level serializable;

核心结论

事务隔离级别越高,数据并发安全性越强,但数据库并发性能越低,开发中一般使用默认REPEATABLE READ

七、总结

  1. 事务是一组 DML 操作集合,核心目标:要么全部成功,要么全部失败,保证数据安全;
  2. 事务操作核心命令:START TRANSACTION开启、COMMIT提交、ROLLBACK回滚;
  3. 事务四大核心特性:原子性、一致性、隔离性、持久性(ACID);
  4. 并发事务三类问题:脏读、不可重复读、幻读;
  5. 四级隔离级别:读未提交、读已提交、可重复读、串行化,安全递增、性能递减。
http://www.jsqmd.com/news/1327216/

相关文章:

  • 云客服+AI语音机器人:优音通信如何重构企业全渠道智能服务的一体化体验?
  • 成都高新区维修价格表怎么看?肖家河防乱收费全攻略 - 观金堂
  • 阿里巴巴Dragonwell17 JDK完整指南:如何快速部署高性能Java运行环境
  • GitHub Issues Agent 自动化实战:用置信度、理由与审批,把自动分诊关进可审计边界
  • DDD 领域驱动设计-看我如何应对业务需求变化?
  • 新消费品牌不做传统广告,为什么选做这样的线下快闪? - 资讯报道
  • 终极热键冲突解决方案:Hotkey Detective完整使用指南
  • 河南小麦编织袋生产商怎么选?以德诚包装为例的全流程交付指南 - 中国品牌企业推荐网
  • STM32标准库GPIO函数深度解析:从寄存器封装到实战应用
  • 紧急补救!档案拆封怎么重新封档,应届生政审救命指南 - 信息快递
  • 十分钟看懂公司经营:管理驾驶舱如何成为CEO的第二双眼睛
  • 微信私域自动化技术解析与实现方案
  • 深入解析C++ STL list:双向链表实现与迭代器设计
  • PlanetScale:大规模并行实现分片 Postgres 备份,高速且用途广!
  • KET口语模考3次才明白:孩子丢分不是因为不会说,而是因为这个
  • 2026工业冷水机、低温冷水机、螺杆式冷水机、风冷式冷水机怎么选?核心维度拆解测评 - 深度智识库
  • 2026年国内四通球阀 适配复杂工况高评价品牌** - 滚动商讯
  • 在昆明处置闲置黄金,怎样筛选具备资质的正规回收商家 - 奢侈品回收评测
  • ECDICT开源英汉词典数据库:76万词条技术架构与开发工具深度解析
  • 当业务人员不再需要提数需求单:自然语言分析正在重新定义数据消费
  • 2026 上海园林绿植租赁,绿植租赁价格,办公室绿植租赁如何挑选服务商 - LYL仔仔
  • 抖店一键上货和手动上货哪个更好?抖掌柜效率与店铺权重详细对比 - 电商分享
  • 免费解锁WeMod高级功能:开源增强工具Wand-Enhancer完整指南
  • 高中毕业档案不用封口吗?应届生一定要看清政审要求 - 资讯报道
  • 自去年底部分亚马逊消费者查看评论受限,平台误标其为机器人却未说明详情
  • SubtitleEdit:免费开源字幕编辑神器,5分钟上手专业级字幕制作
  • PG 日报|修复 GiST 索引漏行缺陷,强化多范围检索准确性
  • Unity与Figma高效协同:构建自动化UI资产同步完整解决方案
  • DDrawCompat:让经典DirectX游戏在现代Windows系统上重生
  • 2026年软文发稿平台实测推荐 首推媒介星 AI**发稿指南 - 资讯报道