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

事务(transaction)

事务管理(acid)

  • Atomicity(原子性)
    一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
  • Consistency(一致性)
    在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
  • Isolation(隔离性)
    数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
  • Durability(持久性)
    事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

隔离所导致的一些问题

  • 脏读
    读到了别人还没提交的数据,结果别人回滚了,你读到的就是 “脏数据”。
    场景:
    事务 A 把某条数据改成 100,但还没提交
    事务 B 立刻读到了 100
    事务 A 出错,回滚,数据变回原来的值
    事务 B 手里拿着的 100 就是脏数据
  • 不可重复读
    同一个事务内,两次读同一条记录,结果不一样。
    场景:
    事务 A 第一次读某条数据,值是 50
    事务 B 修改这条数据并提交
    事务 A 在同一个事务内再次读,变成 60
  • 虚读(幻读)
    同一个事务内,两次查询范围,结果多 / 少了几条记录(像幻觉一样)。
    场景:
    事务 A 查询 “年龄 = 18” 的记录,共 10 条
    事务 B 插入一条新的年龄 = 18 的记录并提交
    事务 A 再次查询,变成 11 条

事务大致流程

-- mysql是默认开启事务自动提交的
SET autocommit =0 -- 关闭
SET autocommit =1 -- 开启(默认)-- 手动处理事务
SET autocommit =0 -- 关闭自动提交-- 事务开启
START TRANSACTION -- 标记一个事务的开始,从这之后的sql都在同一个事务内INSERT xx
INSERT xxx-- 提交 持久化(成功!)
COMMIT
-- 回滚 回到原来的样子 (失败!)
ROLLBACK-- 事务结束
SET autocommit =1 -- 开启自动提交SAVEPOINT 保存点名-- 设置一个事物的保存点
ROLLBACK TO SAVEPOINT 保存点名 -- 回滚到保存点
RELEASE SAVEPOINT 保存点名 -- 撤销保存点

转账例子

create database shop character set utf8mb4 collate utf8mb4_0900_ai_ci -- 新建数据库shop
use shop
create table `account`(`id` int not null auto_increment,`name` varchar(20) not null,`money` decimal(9,2) not null, -- 9位有效数字,小数点后两位primary key (`id`)
)engine = innodb default charset =utf8mb4 -- 创建表accountinsert into `account`(`name`,`money`) 
value('A',2000 ),('B',10000)set autocommit =0;update `account` set money=money-500 where `name` ='A';
update `account` set money=money+500 where `name` = 'A';
-- 转账操作实现-- commit; 事务提交,就被持久化了
-- rollback;回滚set autocommit = 1; -- 设置默认值

相见时难别亦难,东风无力百花残

http://www.jsqmd.com/news/604123/

相关文章:

  • 【Mojo与Python混合编程实战指南】:20年架构师亲授3大无缝接入模式,90%开发者忽略的性能陷阱全曝光
  • 【读书笔记】《理性的非理性》
  • 从仿真到流片:手把手教你写可综合的Verilog task(附真实工程案例)
  • 物流企业如何通过企业级AI Agent优化调度与单据处理?架构师深度评测实在Agent的非侵入式落地路径
  • Python爬虫数据智能分析流水线:PyTorch模型自动化处理实战
  • 【2026 Python原生AOT编译终极指南】:零依赖、亚毫秒启动、生产级瘦身——来自CPython核心组的3项未公开落地规范
  • 配置nanobot的详细教程(已完善)(有错误请指出)谢谢
  • 017篇:录制器的使用:录制一个登录操作
  • DoDAF能力视点(CV)深度解析:从理论基石到卓越实践的体系化构建
  • Python MCP服务器开发模板实战手册(含完整CI/CD流水线与OpenTelemetry集成)
  • 告别繁琐流程,高效获取教育资源的新方式
  • 书匠策AI:论文写作界的“智能导航仪”,带你轻松驶向期刊发表的彼岸
  • Python MCP服务器模板深度拆解(企业级接入SOP首次公开)
  • 从429限流到满速下载:一个HF Token如何解锁Unsloth微调全流程
  • Cursor Pro功能解锁技术探索:设备绑定突破与权限管理实践指南
  • Proteus仿真STM32,CubeMX生成的代码跑不起来?先检查这个时钟频率设置!
  • 从 99.8% 到 14.9%!Paperxie 降 AIGC 神器,本科生论文通关密码
  • 高效Godot资源提取工具:零基础上手与格式转换技巧
  • 为什么你的医疗3D体绘制在NVIDIA A100上仍掉帧?——解析CUDA流同步、纹理缓存对齐与HIP-Clang跨编译器ABI兼容性三大致命盲区
  • 百考通:AI精准精准赋能论文降重与去AI痕迹,让学术成果更高效、更专业
  • 从零构建数字货币量化交易系统:Python实战指南
  • AI入门——如何计算神经网络的参数
  • 短链接day-06
  • 2026 RAG 全景落地教程(非常详细),从大模型基座到 Agent 记忆从入门到精通,收藏这一篇就够了!
  • 书匠策AI:解锁期刊论文“通关秘籍”,让学术写作像“搭积木”一样简单!
  • 实战解析:如何绕过exit()死亡函数实现PHP文件写入(附完整Payload)
  • Vivado硬件调试避坑指南:为什么你的ILA信号总被优化?(附解决方案)
  • 别再手写MCP适配层了!2024最新Python企业模板已内置SPI扩展点、链路追踪埋点与熔断降级策略
  • 编写程序实现瑜伽垫体位标记,精准定位,输出:家用瑜伽辅助,不用教练也标准。
  • Golang GORM怎么做Scopes复用_Golang GORM Scopes教程【推荐】