事务四种隔离级别

四种隔离级别

1.读未提交(Read Uncommitted)

事务A可以读取事务B中未提交的数据
可能发生脏读、不可重复读

2.读已提交(Read Committed)

事务A中可以读取事务B中已经commit的数据(通过事务视图构建实现)
可能存在不可重复读

3.可重复读(Repeatable Read)

查询出来的数据不会受其他事务的影响(查询的是事务视图,会存储回滚日志)
可能发生幻读

4.串行化 (Serializable )

对一条记录做修改时会加读写锁,发生冲突时后访问的事务必须等前一个事务提交才能执行

脏读:
当数据库中一个事务A正在修改一个数据但是还未提交或者回滚,
另一个事务B 来读取了修改后的内容并且使用了,
之后事务A提交了,此时就引起了脏读。

此情况仅会发生在: 读未提交的的隔离级别.

不可重复读:
在一个事务A中多次操作数据,在事务操作过程中(未最终提交),
事务B也才做了处理,并且该值发生了改变,这时候就会导致A在事务操作
的时候,发现数据与第一次不一样了。 就是不可重复读。

此情况仅会发生在:读未提交、读提交的隔离级别.

幻读:
一个事务按相同的查询条件重新读取以前检索过的数据,
却发现其他事务插入了满足其查询条件的新数据,这种现象就称为幻读。

幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,就好象发生了幻觉一样.
一般解决幻读的方法是增加范围锁RangeS,锁定检索范围为只读,这样就避免了幻读。

此情况会回发生在:读未提交、读提交、可重复读的隔离级别.

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!