欢迎关注微信公众号:互联网全栈架构

关系型数据库的事务有四个特性,其中一个就是隔离性(关于事务的更多信息,可以参考之前的一篇文章:漫谈MySQL中的事务)。为了满足不同的应用场景需求,有不同的隔离级别可供选择,在SQL标准和MySQL数据库中,共定义了四种隔离级别,分别是读未提交、读已提交、可重复读、串行化,隔离级别越低,系统的开销和并发通常就会更高,但同时也可能带来脏数据等问题。

今天我们就用实例来演示这四种隔离级别的具体情况,为了简便起见,我们创建一个结构非常简单的表,并插入一条数据以供测试:

#设置事务隔离级别为串行化SETGLOBALTRANSACTIONISOLATIONLEVELSERIALIZABLE;STARTTRANSACTION;#一直阻塞,直到事务一提交,然后读取到id=2的结果SELECT*FROMt_testWHEREid=2;COMMIT;

先执行事务一的SQL,紧接着执行事务二的SQL,会发现事务二一直阻塞,直到事务一提交,然后事务二可以读取到新插入的数据,从而避免了幻读的问题。

五、总结

MySQL的事务隔离级别是非常重要的概念,也是相对比较难的技术点,面试中也会经常问题,上面我们实例演示了这四种隔离级别的具体用法和效果,希望对朋友们有所帮助。上面的示例基于MySQL5.7版本,存储引擎为常用的InnoDB。下面用一个图来总结一下这几种隔离级别的情况:

创作不易,烦请点赞、分享,感谢!

鸣谢:
https://dev.mysql.com/doc/refman/5.7/en/
https://zhuanlan.zhihu.com/p/623298374

推荐阅读:

操控字节码:Javaassist介绍

Spring Boot Starter原理及实践

聊聊MySQL中的死锁

越俎代庖:应用广泛的代理模式

MySQL整数类型的长度到底是什么含义?

漫谈MySQL中的事务

臭名昭著,怙恶不悛的OOM,到底是什么?

本篇文章来源于微信公众号: 互联网全栈架构



微信扫描下方的二维码阅读本文

此作者没有提供个人介绍
最后更新于 2023-11-21