SQL事务隔离级别之Serializable

114 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情

✔个人主页:Mr.Darcy8的掘金主页

🎉欢迎关注👀点赞👍收藏⭐留言📝以及交流人生哲理🎈学习心得🎁

引入

目前为止,我们已经介绍了3种不同的隔离级别了,由低到高分别是:Read Uncommitted、Read Committed、Repeatable Read。还记得他们各自可能会发生的“最高级别”的错误吗?

今天我们就来介绍最后一种隔离级别,也是最高的隔离级别——Serializable

并在最后复习一下各个隔离级别。

1.Serializable

其实大家也猜到了,这是最高的隔离级别,Serializable英式读音:[sɪərɪəlaɪ'zəbl] 美式读音:[sɪərɪrlaɪ'zəbl]

在这种最严格的事务隔离级别下,所有事务都会按照一定次序依次进行,使用串行执行语句。这样的话事务就没有一起运行的情况出现,相当于取消了所谓“并行事务”的概念,自然就不会有上面那些脏读、不可重复读、幻读的情况出现了。

但是显然,正如我在之前某一篇文档所说的,串行运行是一个非常低效率的运行方式,应用程序的性能急剧下降,处理器算力大量浪费。所以在现实的业务使用中,其实很少见到Serializable隔离级别。

2.简要回顾与总结

目前为止我们已经把所有的隔离级别都介绍过了,大致可以汇总成一张如下的表格:

隔离级别(solation Level)脏读(Dirty Read)不可重复读(Non Repeatable Read)幻读(Phantom Read)
Read UncommittedYesYesYes
Read Committed-YesYes
Repeatable Read--Yes
Serializable---

比较明了了吧~yes代表可能发生,-则代表已经被限制,不会发生。

需要注意一下,不同DBMS的默认限制级别可能会不一样,如果你使用的是mysql的InnoDB储存引擎,那么默认的隔离级别就是Repeatable Read,能适用业务的大部分场景,又不至于太降低应用程序效率

但是正如你们所见到的,这个限制级别可能会出现幻读的情况。这也印证了我之前说的“幻读非常重要”。之后我觉得有必要再单独出一期单独讲解幻读的文章。

祝我们学业有成

新人上路,欢迎互相帮扶~Mr_darcy8的掘金主页

可以的话给咱点个赞呗💖