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

MySQL-day4_02(事务)

事务

  • 一、为什么要有事务
  • 二、什么是事务
  • 三、事务命令


一、为什么要有事务

  • 事务广泛运用于订单系统、银行系统等多种场景。

例如:A用户和B用户是银行的储户,现在 A 要给 B 转账 500元,那么需要做以下几件事:

  1. 检查 A 的账户余额>500元;
  2. A 账户中扣除 500 元;
  3. B 账户中增加 500 元。

正常流程走下来,A 账户扣了 500,B 账户加了 500,皆大欢喜。那如果 A 账户扣了钱之后,系统出故障了呢?A 白白损失了 500,而 B 也没有收到本该属于他的 500。
以上的案例中,隐藏着一个前提条件:A 扣钱和 B 加钱,要么同时成功,要么同时失败,事务的需求就在于此。

二、什么是事务

  • 所谓事务,是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
  • 例如:银行转账工作,从一个账号扣款并使另一个账号增款,这两个操作要么都执行,要么都不执行。所以,应该把他们看成一个事务。
  • 事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。

三、事务命令

开启事务

begin;

开启事务后执行修改 UPDATE 或删除 DELETE 记录语句,变更会写到缓存中,而不会立刻生效。

回滚事务

rollback;
放弃修改。

提交事务
commit;
将修改的数据写入实际的表中。

例 1:开启事务,删除 students 表中 studentNo 为 001 的记录,同时删除 scores 表中 studentNo 为 001 的记录,回滚事务,两个表的删除同时放弃。

begin;
DELETE from students where studentNo = '001';
DELETE from scores where studentNo = '001';
rollback;

开启事务:
在这里插入图片描述

删除 students 表中 studentNo 为 001 的记录:
在这里插入图片描述

在这里插入图片描述

删除 scores 表中 studentNo 为 001 的记录:
在这里插入图片描述

在这里插入图片描述

回滚事务:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

▲ 回滚操作的案例:
例 2:开启事务,删除 students 表中 studentNo 为 001 的记录,同时删除 scores 表中 studentNo 为 001 的记录,提交事务,使两个表的删除同时生效。

begin;
DELETE from students where studentNo = '001';
DELETE from scores where studentNo = '001';
-- 一旦提交事务,两个删除操作同时生效
commit;

在这里插入图片描述

在这里插入图片描述

▲ 没有写 begin 代表没有事务,没有事务的表操作都是实时生效。
▲ 如果只写了 begin,没有 rollback,也没有 commit,结果是 rollback。

http://www.dtcms.com/a/394141.html

相关文章:

  • JUC(8)线程安全集合类
  • springboot中@EnableAsync有什么作用
  • Spark专题-第二部分:Spark SQL 入门(6)-算子介绍-Generate
  • C#练习题——Dictionary
  • Feign
  • SPA小说集之三《森林城市反甩锅战:ERP的权责边界》
  • Qt(模态对话框和非模态对话框)
  • 【无标题】物联网 frid卡控制
  • 【LLM LangChain】 模型绑定工具+调用工具(手动调用/LangGraph/AgentExecutor)+相关注意事项
  • 图神经网络(GNN)入门:用PyG库处理分子结构与社会网络
  • 【C++】编码表 STL简介:STL是什么,版本,六大组件,重要性以及学习方法总结
  • show_interrupts函数的进一步解析及irq_desc结构体
  • Kafka面试精讲 Day 19:JVM调优与内存管理
  • 10.vector容器
  • Linux系统介绍
  • MFC中的CMFCDynamicLayout类的介绍
  • UniScene 统一驾驶场景 | 生成语义占据 | 生成多视角视频 | 生成激光点云 CVPR2025
  • Git 简明教程:从原理到实战
  • 【设计模式】中介者模式
  • nginx添加modsecurity插件
  • 代码上传Github:SSH法
  • 【iOS】AFNetworking初步了解及使用
  • JVM实战-G1参数调优
  • 超简单的视频分割脚本
  • 基于51单片机电子钟闹钟12/24小时制LCD显示( proteus仿真+程序+设计报告+讲解视频)
  • 在 Windows 系统上安装官方 Codex CLI 教程
  • Redis 配置与优化全攻略
  • 二分查找左右边界写法
  • Oracle体系结构-Large Pool详解
  • Elasticsearch面试精讲 Day 19:磁盘IO与存储优化