【MySQL】MySQL事务保姆级教程(适合MySQL初学者学习)

🧑‍💻作者名称:DaenCode

🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。

😎人生感悟:尝尽人生百味,方知世间冷暖。

📖所属专栏:重温MySQL



文章目录

🌟前言

无论是在校招、社招,亦或者大学计算机专业、软件工程等相关面试或者考试中,MySQL事务的相关知识都是必不可少的。本文主要为MySQL初学者快速学习MySQL事务保驾护航。


🌟事务的定义及作用

定义 :事务是一个不可再此分割的最小工作单元。换句话说事务通常代表一个完整的业务或者业务线。通俗来说,一个业务功能所包含的操作,要么全部成功,要么全部失败
作用

  • 为数据库的操作或者一个完整的业务功能提供一个从失败操作中恢复
    到正常状态的方法,同时保证数据库操作在异常状态下保持一致性。
  • 防止多个应用程序并发访问数据库时,多个应用程序间的操作产生干扰,影响业务功能的正常性。

🌟事务的特性(ACID)

  • 原子性(Atomicity) :事务必须是最小的工作单元,一个事务中的所有操作,应该做到:要么全部成功,要么全部失败,否则回滚到初始状态。
  • 一致性(Consistency) :事务在开始和结束时,数据必须保持一致状态。通俗说就是让数据保持逻辑上的"合理性",比如:小明给小红打100块钱,既要让小明的账户减少100,又要让小红的账户上增加100块钱;
  • 隔离性(Isolation) :事务的隔离性确保并发执行的事务彼此之间相互隔离,每个事务都感觉不到其他并发事务的存在。独立执行,互不干扰。
  • 持久性(Durability) :事务一旦执行成功,数据将会永久保存到数据库中。

🌟事务的隔离级别

隔离级别一览表

隔离级别 描述 现象
读未提交(Read Uncommitted) 最低隔离级别,一个事务可以读取另一个未提交事务的数据。 脏读、不可重复读、幻读都可能发生。
读已提交(Read Committed) 一个事务只能读取已提交事务的数据。 脏读不会发生,但不可重复读和幻读仍然可能发生。
可重复读(Repeatable Read) MySQL默认隔离级别,一个事务在执行过程中多次读取同一行的数据结果都是一致的 脏读和不可重复读不会发生,但幻读仍然可能发生。
串行化(Serializable) 最高隔离级别,对于同一份数据资源同时只允许一个事务进行读写操作。 脏读、不可重复读和幻读都不会发生。

隔离级别举例解读

我们下面来对每个隔离级别,提出具体的例子进行解读,供大家理解。所有的例子都以下表为基础。串行化就不做出具体例子说明了。

id product_name price
1 手机 1000
2 电脑 2000
3 平板 800

读未提交

1.A查询价格表:select * from price;

2.B修改价格表中平板的价格为100,但是并未提交:update set price=100 where id=3;

3.A再次查询价格表时,平板的价格会显示100。

读已提交

1.A查询价格表:select * from price;

2.B修改价格表中平板的价格为200,并提交:update set price=200 where id=3;

3.A再次查询价格表时,平板的价格会显示200。

可重复读

1.A查询价格表:select * from price;

2.B修改价格表中平板的价格为300,并提交:update set price=300 where id=3;

3.A查询价格表时,平板的价格依然是原数据80。

🌟事务控制语句

控制语句 描述
BEGINSTART TRANSACTION 开始一个新的事务
COMMIT 提交当前事务的修改,使其生效,并永久保存到数据库中
ROLLBACK 回滚当前事务的修改,取消事务所做的所有修改
SAVEPOINT savepoint_name 创建一个保存点,用于回滚到特定的保存点
RELEASE SAVEPOINT savepoint_name 删除指定的保存点
ROLLBACK TO SAVEPOINT savepoint_name 回滚到指定的保存点,并取消保存点之后的所有修改

🌟写在最后

最后感谢大家对于本篇博文的阅读,如有不足之处还请大家在评论区留言,以便后续发布更适合大家学习的博文。


相关推荐
Leekwen10 分钟前
认识人与人的大不同
学习·思考·生活·认知高度·审视自己
一只小菜鸡..16 分钟前
Stanford CS144 学习笔记 (九):大师访谈与互联网的未来
笔记·学习
范什么特西16 分钟前
每日学习-06
学习
后端优选官23 分钟前
上海Agent开发公司:企业级智能体软件的技术架构与落地评估
数据库·人工智能·架构·软件开发·开发经验·上海
JustNow_Man23 分钟前
`openspec/config.yaml` 解析与生效机制
数据库
Databend27 分钟前
用 QUALIFY 写出更清晰的窗口函数 SQL
数据库·sql·数据分析
数智化管理手记29 分钟前
应收应付资金占用过高怎么办?应收应付搭配账龄分析怎么做
大数据·网络·数据库·人工智能·数据挖掘
用户713335851562435 分钟前
MySQL - EXPLAIN 执行计划
数据库
woshihuanglaoshi1 小时前
参数验证_Flutter在鸿蒙平台确保路由参数类型安全
学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
这就是佬们吗1 小时前
Python入门③-运算符、条件与循环
开发语言·数据库·vscode·python·pycharm·编辑器