数据库事务的四种隔离级别详解(有图有文)

数据库事务的四种隔离级别详解(有图有文)-mikechen

数据库事务的隔离级别主要是四种:读未提交、读已提交、可重复读、串行化,下面分别详解@mikechen

读未提交(Read Uncommitted)

读未提交READ_UNCOMMITTED:这是事务最低的隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。

读未提交的情况下,事务的修改即使没有提交,对其他事务也都是可见的,这种隔离级别会产生脏读,不可重复读和幻像读。

1.脏读

一个事务读取到另一个事务未提交的更新数据,这就是脏读。

数据库事务的四种隔离级别详解(有图有文)-mikechen

2.不可重复读

在同一个事务中,多次读取同一数据返回的结果不同,不可重复读和脏读不同的是这里读取的是已经提交过后的数据。
数据库事务的四种隔离级别详解(有图有文)-mikechen

3.幻读

一个事务读到另一个事务已提交的 insert 数据。
数据库事务的四种隔离级别详解(有图有文)-mikechen

读已提交(READ-COMMITTED)

事务读取已提交的数据,大多数数据库的默认隔离级别。

保证一个事务修改的数据提交后才能被另外一个事务读取,另外一个事务不能读取该事务未提交的数据。

这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。

不可重复读

在同一个事务中,多次读取同一数据返回的结果不同,不可重复读和脏读不同的是这里读取的是已经提交过后的数据。
数据库事务的四种隔离级别详解(有图有文)-mikechen

幻读

一个事务读到另一个事务已提交的 insert 数据。
数据库事务的四种隔离级别详解(有图有文)-mikechen

 

可重复读(REPEATABLE-READ )

这个级别是MySQL的默认隔离级别,它解决了脏读的问题,同时也保证了同一个事务多次读取同样的记录是一致的,但这个级别还是会出现幻读的情况。

数据库事务的四种隔离级别详解(有图有文)-mikechen

 

串行化(SERIALIZABLE )

最高的隔离级别,完全服从ACID的隔离级别,所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,该级别可以防止脏读、不可重复读以及幻读。

作者简介

陈睿|mikechen,10年+大厂架构经验,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法