开启掘金成长之旅!这是我参与「掘金日新计划 · 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 Uncommitted | Yes | Yes | Yes |
| Read Committed | - | Yes | Yes |
| Repeatable Read | - | - | Yes |
| Serializable | - | - | - |
比较明了了吧~yes代表可能发生,-则代表已经被限制,不会发生。
需要注意一下,不同DBMS的默认限制级别可能会不一样,如果你使用的是mysql的InnoDB储存引擎,那么默认的隔离级别就是Repeatable Read,能适用业务的大部分场景,又不至于太降低应用程序效率
但是正如你们所见到的,这个限制级别可能会出现幻读的情况。这也印证了我之前说的“幻读非常重要”。之后我觉得有必要再单独出一期单独讲解幻读的文章。
祝我们学业有成
新人上路,欢迎互相帮扶~Mr_darcy8的掘金主页
可以的话给咱点个赞呗💖