数据库事务的隔离级别主要是四种:读未提交、读已提交、可重复读、串行化,下面分别详解@mikechen
读未提交(Read Uncommitted)
读未提交READ_UNCOMMITTED:这是事务最低的隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。
读未提交的情况下,事务的修改即使没有提交,对其他事务也都是可见的,这种隔离级别会产生脏读,不可重复读和幻像读。
1.脏读
一个事务读取到另一个事务未提交的更新数据,这就是脏读。
2.不可重复读
在同一个事务中,多次读取同一数据返回的结果不同,不可重复读和脏读不同的是这里读取的是已经提交过后的数据。
3.幻读
一个事务读到另一个事务已提交的 insert 数据。
读已提交(READ-COMMITTED)
事务读取已提交的数据,大多数数据库的默认隔离级别。
保证一个事务修改的数据提交后才能被另外一个事务读取,另外一个事务不能读取该事务未提交的数据。
这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。
不可重复读
在同一个事务中,多次读取同一数据返回的结果不同,不可重复读和脏读不同的是这里读取的是已经提交过后的数据。
幻读
一个事务读到另一个事务已提交的 insert 数据。
可重复读(REPEATABLE-READ )
这个级别是MySQL的默认隔离级别,它解决了脏读的问题,同时也保证了同一个事务多次读取同样的记录是一致的,但这个级别还是会出现幻读的情况。
串行化(SERIALIZABLE )
最高的隔离级别,完全服从ACID的隔离级别,所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,该级别可以防止脏读、不可重复读以及幻读。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》