诚意满满之讲透事务隔离级别

​

继上一篇:诚意满满之讲透事务,这一篇讲一下事务隔离。

上一篇没看也没关系,知识点是独立的。

为什么会存在不同的事务隔离级别?

首先我们先明白一件事:为了追求高性能,许多程序在设计之初往往会考虑加入并发,一旦加入并发,又面临并发带来的种种问题,为了解决并发问题,又引入了各种各样的机制。同样的,事务隔离是数据库解决并发问题的一种机制

不同的事务隔离级别是在不同情况下,追求并发安全与性能的不同选择。

这时候*大的举手了:能不能既要快,又安全?

这种既要又要且要,答案是有,只不过不是现在。如果未来的科技发展能够使得数据的读取速度跟上cpu的处理速度,那么并发将不复存在,并发带来的许多复杂问题也将迎刃而解。当然,除了并发外,还有另外一个重磅话题:缓存也将扫尽历史的垃圾堆,同样进垃圾堆的,还有不少八股文......

事务隔离级别主要分两块:

  • 事务隔离级别的定义
  • 不同隔离级别面临的问题

事务隔离级别分为四种:

  1. 读未提交(Read Uncommitted):最低的隔离级别,允许一个事务可以读取另一个事务尚未提交的数据,此时事务之间没有锁的存在。
  2. 读已提交(Read Committed):要求一个事务只能读取到其他事务已经提交的数据,这样可以避免脏读的问题。但是可能会出现不可重复读的问题,即同一个事务内两次相同的查询结果不一致。
  3. 可重复读(Repeatable Read):要求一个事务在执行过程中多次读取同样的数据时,结果应该是一致的。这可以防止脏读和不可重复读的问题。但是可能会出现幻读的问题,即同一个事务内两次相同的查询返回的记录集不一样。
  4. 串行化(Serializable):最高的隔离级别,要求事务串行执行,即每个事务在执行过程中都会对数据进行加锁,避免了并发带来的问题。但是会降低并发性能。

事务隔离级别常见的三种问题

脏读、不可重复读、幻读

脏读

脏读发生在「读未提交」这个事务隔离级别,指的是一个事务读到了另一个事务尚未提交的数据,这种现象的风险在于,一旦另一个事务回滚了,应用可能会基于已经不存在的数据继续处理,继而造成不可知的风险。

不可重复读

不可重复读存在于「读已提交」的事务隔离级别。当一个事务分两次读取数据时,前后读取到的数据可能存在不一致的情况。不可重复读指的是数据更新的情况。

幻读

与不可重复读类似,同一个事务在两次读取中,获取到不同的结果集。 注意,不可重复读指的是两次读取结果 不一样,而幻读指的是两次读取的结果集不一样。前者是数据update存在的问题,后者是数据insert时存在的问题。

相对来说,这两篇都是概念性的,篇幅短也很好理解,那么接下来就要上点强度了。知道了事务的四个特性,知道了事务隔离级别之后,如果要我们来实现,我们该怎么做呢?

他山之石可以攻玉,后面的章节我们便来看看MySQL是如何做到的。

  • mysql如何实现持久性与原子性
  • mysql如何实现事务隔离(锁与MVCC)
相关推荐
lusklusklusk40 分钟前
Python 巡检脚本:进程运行状态、数据库写入时效检查及邮件通知与告警
数据库·python·oracle
GeW1 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
SelectDB1 小时前
Doris Arrow Flight SQL 高速读取协议实战:与 Snowflake 客户端取数链路对照
大数据·数据库·数据分析
曼岛_1 小时前
[图解密码学]第4章 古典密码
java·数据库·密码学
瀚高PG实验室2 小时前
HGDB V9.0.5 .pgpass 免密登录提示 IsEncryptNon-base64 encoding 警告处理
数据库·postgresql·瀚高数据库
龙腾AI白云3 小时前
大模型检索增强生成(RAG)的技术原理与架构设计
数据库·python·机器学习·知识图谱
KaiwuDB3 小时前
KaiwuDB 运维实战06:数据库备份与恢复:从理论到实战
运维·数据库·时序数据库·kaiwudb
数字新视界3 小时前
空调控制器AIRC800的智能化管理与应用实践
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
学IT的周星星4 小时前
LangGraph:用「流程图」的方式编排 Agent
数据库·人工智能·大模型·llm·流程图·agent
吃一碗粉只付一碗钱4 小时前
10-令牌里的用户主键不要明文
服务器·数据库·sql·sqlserver·c#