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

Mysql事务的特性和隔离级别

1、事务的定义是什么
一组操作要么全部成功,要么全部失败。对 MySQL:就是一组 SQ L要么全部成功执行,要么全都不执行 (或失败回滚)。
 

2、事务的四大特性是什么
分别是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)以及持久性(Durability)。通常称为事务的 ACID 四大特性。

接下来分别解释下各个特性的含义:

(1)原子性
一个事务被视为一个不可分割的最小单元,这个事务中的操作要么都成功,要么都失败,不能只是执行其中的一部分。
比如: A 要给 B 转钱,A 扣除 100 元 ,B 必须也增加 100 元

(2)一致性
事务开始前和结束后数据库中数据的完整性没有被破坏,只是从一种一致性状态转换到另一种一致性的状态。
比如:A 和 B 加起来有 100 元钱,无论 A 和 B 如何转账,A 和 B 的钱加起来永远都是 100 元

(3)隔离性
并发执行的各事务之间不能互相干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的。

(4)持久性
事务一旦提交,那么它所做的修改就会永久保存到数据库中。即使此时系统崩溃,已经提交的修改数据也不会因此丢失。
 

3、事务并发带来的问题是什么
我们都知道 MySQL 是个客户端/服务器架构组件,对于服务器来说,可能同时在处理多个事务

上面讨论的事务特性中的隔离性,理论上某个事务对数据进行访问时,其他事务应该排队,当该事务提交后,其他事务才可以继续访问该数据,不过此时并发事务的执行就变成了串行化执行。此时性能就会大打折扣。

我们的目标其实是既需要保持事务一定的隔离性,又需要让服务器在处理多事务并发时性能尽量高。

如果我们不考虑隔离性,可能会带来什么样的数据问题呢?

(1)脏读
事务 A 读取到了事务 B 已经修改但还没有提交的数据

(2)不可重复读
同一个事务中,两次查询同一行数据时返回不同的结果。强调现有行的 update 或 delete

(3)幻读
同一个事务中,两次查询同一范围内的数据时,第二次查询的结果集包含了之前不存在的新行或缺少了某些行。强调新行的 insert 或现有行的 delete
 

4、事务的四个隔离级别是什么
为解决事务并发带来的上述问题,MySQL 提出事务隔离级别,不同的事务隔离级别可以解决不同的问题。总结如下:
 

在这里插入图片描述
 

各隔离级别的详细说明如下:
读未提交(RU)
特点:允许读取尚未提交的数据
优点:提供最高的并发性能
缺点:可能导致脏读、不可重复读和幻读,不适合大多数实际应用

读已提交(RC)
特点:只能读取已经提交的数据
优点:避免脏读,提供了较好的并发性能
缺点:仍可能发生不可重复读和幻读

可重复读(RR)
特点:在事务期间,保证多次读取同一行数据的结果一致
优点:避免脏读和不可重复读,适合大多数应用场景
缺点:可能发生幻读,特别是在范围查询时

串行化(Serializable)
特点:最高的隔离级别,确保事务按照某种顺序依次执行
优点:完全避免脏读、不可重复读和幻读问题,提供最严格的一致性保证
缺点:可能显著降低并发度,影响系统性能

 

5、实际应用如何选择事务的隔离级别
见仁见智,没有最好的,只有更适合的。
需要根据实际业务需求和技术约束等情况来选择合适的隔离级别。

例如:
金融系统场景:为确保数据的一致性及准确性,通常选择 Serializable 或 Repeatable Read 级别

电商网站场景:考虑到电商场景的高并发需求,可能会选择 Read Committed 级别旨在取得性能和一致性之间的平衡

日志记录或统计分析场景:数据一致性可能要求不高,可选择 Read Uncommitted 来提高性能

 
 
 
 
 
 
 

大佬,点个赞在走呗!

 

在这里插入图片描述


http://www.kler.cn/a/469837.html

相关文章:

  • excel如何将小数转换为百分比
  • 微信小程序校园自助点餐系统实战:从设计到实现
  • 遗传学的“正反”之道:探寻生命密码的两把钥匙
  • 26考研资料分享 百度网盘
  • 极客说|微软 Phi 系列小模型和多模态小模型
  • 基于Informer网络实现电力负荷时序预测——cross validation交叉验证与Hyperopt超参数调优
  • HTML5 + Bootstrap5 网站底部代码分享与解析
  • 【网络安全设备系列】13、网页防篡改
  • Speech Recognition vs. Voice Recognition | 语音识别工作原理 | 模型训练 | 应用
  • Neo4j的部署和操作
  • 2025年01月06日Github流行趋势
  • 每日AIGC最新进展(80): 重庆大学提出多角色视频生成方法、Adobe提出大视角变化下的人类视频生成、字节跳动提出快速虚拟头像生成方法
  • 【保姆级爬虫】微博关键词搜索并获取博文和评论内容(python+selenium+chorme)
  • 幽境察韵:printf 的格式笔触,勾勒打印的精致纹理
  • 【模型部署】实例(附代码)
  • 【从0带做】基于Springboot3+Vue3的疾病防控综合系统
  • 使用 Hadoop + MapReduce + Elasticsearch 实现高效的日志处理与分析
  • vulhubn中potato靶场
  • 长上下文窗口的大语言模型数据设计
  • 场馆预定平台高并发时间段预定实现V1
  • .net core三种依赖注入方式,原生的依赖注入器,scrutor,autofac
  • cat命令详解
  • leecode1035.不相交的线
  • 低功耗视频监控/太阳能无线监控在水产渔业养殖场景中有哪些应用?
  • Python编程实例-机器学习中的Hinge Loss编程实现
  • 基于SpringBoot的音乐网站与分享平台