news 2026/6/14 9:43:14

基础-事务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基础-事务

一、MySQL基础

在数据的世界里,就像银行系统中的一笔转账操作,我们不能接受"资金从A账户划出,但B账户未收到"的混乱局面。事务正是数据库中的"安全卫士",确保数据操作的完整性与可靠性。当您在电商网站下单时,系统需要同时更新库存、创建订单、扣除余额——这些操作必须全部成功或全部失败,否则数据库将处于不一致状态。事务就是解决这种"要么全有,要么全无"问题的完美方案。

1. 事务

1.1 事务的简介

事务是数据库管理系统(DBMS)中一个逻辑工作单元,由一组操作组成,这些操作要么全部成功执行,要么全部失败回滚,以确保数据库的一致性。

"事务是数据库中一个不可分割的工作单元,它将多个数据库操作视为一个整体。"
——《数据库事务详解》

1.2 事务操作

事务是默认提交的,之前我们写的单挑sql语句就默认是一条语句的事务。

select @@autocommit; 如果为1,就是自动提交,否则为0则是手动提交;

可以通过手动设置更改提交方式。

-- ---------------------------- 事务操作 ---------------------------- -- 数据准备 create table account( id int auto_increment primary key comment '主键ID', name varchar(10) comment '姓名', money int comment '余额' ) comment '账户表'; insert into account(id, name, money) VALUES (null,'张三',2000),(null,'李四',2000); -- 恢复数据 update account set money = 2000 where name = '张三' or name = '李四'; -- case1: 通过手动修改提交事务的方法控制提交数据 select @@autocommit; set @@autocommit = 1; -- 设置为手动提交 -- 转账操作(张三转给李四1000) -- 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;

-- case2: 手动提交事务 -- 开启事务 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.3 事务的四大特性

事务的四大特性(ACID)是其核心价值所在,它们共同确保了数据的完整性和可靠性。

1. 原子性(Atomicity)

定义:事务是一个不可分割的工作单元,其中的所有操作要么全部成功,要么全部失败回滚。

生动案例
银行转账操作如同一个"黑箱",用户无需关心内部细节。如果转账过程中系统崩溃,整个事务将回滚,A账户不会被扣款,B账户也不会被加款。

技术实现:通过回滚日志(Rollback Log)实现。系统记录每个操作的前状态,如果事务失败,系统可以恢复到事务开始前的状态。

2. 一致性(Consistency)

定义:事务必须使数据库从一个一致性状态转换到另一个一致性状态,保证数据的完整性。

生动案例
在银行转账中,一致性意味着"转账前后,两个账户的总金额保持不变"。如果A账户减少1000元,B账户必须增加1000元,总金额不变。

技术实现:通过数据库的完整性约束(如主键、外键、唯一性约束)和业务逻辑来保证。

3. 隔离性(Isolation)

定义:并发执行的事务之间相互隔离,一个事务的中间状态对其他事务不可见。

生动案例
当您查看银行账户余额时,系统不会显示"正在转账中的临时状态"(如A账户已扣款但B账户未到账)。隔离性确保了您看到的是一个稳定、一致的账户状态。

技术实现:通过锁机制(如共享锁、排他锁)和隔离级别(Read Uncommitted、Read Committed、Repeatable Read、Serializable)来实现。

4. 持久性(Durability)

定义:一旦事务提交,其结果将永久保存在数据库中,即使系统发生故障也不会丢失。

生动案例
当您确认完成转账后,系统会返回"转账成功"的提示。即使在转账后系统立即崩溃,您的账户余额也会正确反映这次转账。

技术实现:通过日志(Write-Ahead Logging)和检查点(Checkpoint)机制实现。系统先将事务的修改记录到日志,再更新数据库,确保崩溃后能从日志恢复。

1.4 事务的生命周期

事务的执行过程遵循明确的生命周期阶段:

阶段说明业务场景
活动(Active)事务开始执行,正在处理数据库操作用户提交订单,系统开始处理
部分提交(Partially Committed)事务执行到最后一条语句,但尚未提交订单信息已写入,但库存未更新
失败(Failed)事务中发生错误,无法继续库存不足,无法完成订单
中止(Aborted)事务失败并回滚,数据恢复到事务前状态系统自动回滚,用户未被扣款
提交(Committed)事务成功完成,结果永久保存订单成功创建,库存已更新

1.5 事务并发问题

在多用户环境中,事务并发执行可能导致问题,如:

  • 脏读(Dirty Read):读取了未提交的数据
  • 不可重复读(Non-Repeatable Read):同一事务中多次读取同一数据,结果不一致
  • 幻读(Phantom Read):同一事务中,查询结果集的行数不一致

1.6 事务的隔离级别

级别从上往下越来越高,性能反之。

-- 查看事务隔离级别 select @@transaction_isolation; -- 设置事务隔离级别 set session transaction isolation level read uncommitted ; set session transaction isolation level repeatable read ;

"事务不是数据库的负担,而是数据库的保障。"
——《数据库事务的本质》

在现代数据库系统中,事务是确保数据一致性和可靠性的基石。无论是在银行系统、电商网站还是社交平台,事务都在默默工作,确保您的每一笔交易、每一条消息都准确无误。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 0:14:23

YOLO模型灰度发布策略:确保线上服务稳定过渡

YOLO模型灰度发布策略:确保线上服务稳定过渡 在智能制造工厂的质检产线上,一台搭载YOLOv8的视觉检测系统正以每秒30帧的速度扫描电路板。突然,新上线的YOLOv10模型开始频繁误判虚焊点——若这是全量部署,整条产线将立即停摆。所幸…

作者头像 李华
网站建设 2026/6/13 8:47:33

YOLO推理耗时分解:前处理、模型、后处理各占多少?

YOLO推理耗时分解:前处理、模型、后处理各占多少? 在工业质检线上,一台AOI(自动光学检测)设备突然帧率腰斩——从稳定的30FPS掉到15FPS,而GPU利用率却只有50%。工程师第一反应是“模型太大”,可…

作者头像 李华
网站建设 2026/6/13 7:44:21

深度学习--CUDA安装配置、pytorch库、torchvision库、torchaudio库安装

一、下载CUDA 1、什么是CUDA CUDA 是 NVIDIA 为自家 GPU 打造的“计算引擎”,它让 GPU 不仅能处理图形,更能变成一个超级并行处理器,用来加速科学计算、人工智能、模拟等海量计算任务。 2、查看电脑版本号 打开终端输入nvidia-smi查看 3、…

作者头像 李华
网站建设 2026/6/13 14:12:15

YOLO模型失败案例复盘:一次因数据偏差导致的事故

YOLO模型失败案例复盘:一次因数据偏差导致的事故 在某电子制造工厂的一条SMT生产线上,自动化质检系统突然“失明”——连续三天未能识别出一批存在明显电容缺失的PCB板。这些本应被拦截的不良品最终流入后续工序,造成数千元损失和客户投诉。而…

作者头像 李华
网站建设 2026/6/13 14:03:36

YOLO目标检测API设计规范:构建易用服务接口的原则

YOLO目标检测API设计规范:构建易用服务接口的原则 在智能制造、智慧城市和自动驾驶等前沿领域,视觉感知正从“可有可无”走向“核心驱动”。面对海量视频流与实时决策需求,如何将强大的AI模型转化为稳定可靠的服务能力,成为工程落…

作者头像 李华
网站建设 2026/6/13 3:22:37

工程实践:破解智能体错误的长尾效应——论“悔改机制”中的通知分级与防再犯设计

在真实业务里,智能体最危险的失败模式往往不是“当场答错”——因为当场答错至少还有机会被用户质疑、被客服兜底、被人工复核流程拦住。更隐蔽、也更具破坏性的情况是:智能体在某一次会话里给出了看似可信的建议,用户照做了,流程…

作者头像 李华