关系型数据库的事务有四个特性,其中一个就是隔离性(关于事务的更多信息,可以参考之前的一篇文章:漫谈MySQL中的事务)。为了满足不同的应用场景需求,有不同的隔离级别可供选择,在SQL标准和MySQL数据库中,共定义了四种隔离级别,分别是读未提交、读已提交、可重复读、串行化,隔离级别越低,系统的开销和并发通常就会更高,但同时也可能带来脏数据等问题。
今天我们就用实例来演示这四种隔离级别的具体情况,为了简便起见,我们创建一个结构非常简单的表,并插入一条数据以供测试:
#设置事务隔离级别为串行化SETGLOBALTRANSACTIONISOLATIONLEVELSERIALIZABLE;STARTTRANSACTION;#一直阻塞,直到事务一提交,然后读取到id=2的结果SELECT*FROMt_testWHEREid=2;COMMIT;
先执行事务一的SQL,紧接着执行事务二的SQL,会发现事务二一直阻塞,直到事务一提交,然后事务二可以读取到新插入的数据,从而避免了幻读的问题。
MySQL的事务隔离级别是非常重要的概念,也是相对比较难的技术点,面试中也会经常问题,上面我们实例演示了这四种隔离级别的具体用法和效果,希望对朋友们有所帮助。上面的示例基于MySQL5.7版本,存储引擎为常用的InnoDB。下面用一个图来总结一下这几种隔离级别的情况:

创作不易,烦请点赞、分享,感谢!
推荐阅读:
本篇文章来源于微信公众号: 互联网全栈架构
微信扫描下方的二维码阅读本文

Comments NOTHING