事务隔离级别有哪些?

简介: 讲述事务隔离级别

参考资料

  1. 《高性能 MySQL 第三版》第 1 章 MySQL 架构与历史 Page 8.
  2. Spring 事务 -- @Transactional的使用 - 简书 (jianshu.com)

READ UNCOMMITTED 未提交读

事务可以读取其他事务未提交的数据,这也被称为 脏读。比如,事务 A 读取了事务 B 更新后的数据,然后 B 回滚操作,那么 A 读取到的数据是脏数据。

READ COMMITED 提交读

是大多数数据库系统的默认隔离级别。一个事务从开始直到提交之前,所做的任何修改对其他事务都不可见,这个隔离级别有时候也叫 不可重复读,因为在事务执行两次查询的过程中,可能因为数据被其他事务修改,导致读取到两个不一样的结果。

REPEATABLE READ 可重复读

是 MySQL 的默认事务隔离级别。该级别解决了脏读和不可重复读的问题,但是理论上还是无法解决另外一个幻读的问题。幻读 指的是事务 A 在读取某个范围内的记录时,事务 B 又在该范围插入了一条新的记录,当事务 A 再次读取该范围的记录时,会产生幻行。

在该事务隔离级别下,如果检索条件有索引(包括主键索引)的时候,默认加锁方式是 Next-Key 锁;如果检索条件没有索引,更新数据时会锁住整张表。一个间隙事务加了锁,其他事务是不能子啊这个间隙插入记录的,这样可以防止幻读。

SERIALABLE 可串行化

是最高的隔离级别。该隔离级别强制事务串行执行,它会在读取的每一行数据上加锁,这样做可能会导致大量的超时和锁争用的问题。除非在非常需要确保数据一致性而且可以接受没有并发的情况下,才考虑采用该级别。

隔离级别越高,越能保证数据完整性和一致性,但是对并发性能的影响也就越大。


💡 不可重复读和幻读的区别

  1. 不可重复读侧重于修改,幻读侧重于新增或删除。
  2. 解决不可重复读的问题只需要锁住满足条件的行,解决幻读需要锁表。
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
|
2月前
|
SQL 数据库
事务的隔离级别有哪些
【10月更文挑战第17天】事务的隔离级别有哪些
|
16天前
事务的隔离级别
在高并发情况下,并发事务会产生脏读、不可重复读、幻读问题,这时需要用隔离级别来控制 读未提交: 允许一个事务读取另一个事务已提交的数据,可能出现不可重复读,幻读。 读提交: 只允许事务读取另一个事务没有提交的数据可能出现不可重复读,幻读。 可重复读: 确保同一字段多次读取结果一致,可能出现幻读。 可串行化: 所有事务逐次执行,没有并发问题。
|
7月前
|
供应链 数据库
|
机器学习/深度学习 算法 关系型数据库
数据库事务——事务隔离级别
数据库事务——事务隔离级别
|
算法 关系型数据库 MySQL
事务的隔离级别和对应的问题
事务的隔离级别和对应的问题
|
SQL 关系型数据库 MySQL
MySQL 事务隔离级别以及脏读,不可重复读,幻读
MySQL 事务隔离级别以及脏读,不可重复读,幻读
123 0
|
存储 SQL 安全
事务ACID与隔离级别
事务ACID与隔离级别
102 0
|
SQL Oracle 关系型数据库
数据库事务隔离级别
数据库事务隔离级别
125 0
|
SQL Oracle 关系型数据库
【事务隔离级别】
【事务隔离级别】
113 0
【事务隔离级别】