数据库隔离级别[对应封锁协议]

1.读未提交(read uncommit)

一级封锁协议(读取数据的时候不加锁,更新的时候整个加X锁)

b事物执行到一半,a事物不检测锁直接读取,结果b事物回滚了,导致a事物读出了一个错的结果,这就是脏读。

2.读已提交(read committed)

二级封锁协议(读取数据的时候加S锁,更新的时候加X锁)

a事物每次读取的时候都会尝试获取s锁,如果b事物在更新,则a阻塞等待b事物释放。

解决了脏读的问题。

因为a读取完毕以后直接释放,如果a事物有两次读取操作,而在这期间b更新了数据,

会导致两次结果不一样。这就是不可重复读

3.可重复读(repeatable read)

三级封锁协议(对读取数据的整个事务加S锁,更新的时候整个加X锁)

因为a读取操作整个加了s锁,所以在此期间b事物不能获得x锁。这样就解决了不可重复读问题。

幻读a在读表的时候,b往表里删除行,导致a统计的结果和表里现在的不一致,好像发生了幻觉。(幻读来源于表行的增加或删除,解决幻读只能对表加锁)

4.序列化(sirializable)

锁全表(事物不并发执行)

解决了幻读现象。

猜你喜欢

转载自blog.csdn.net/qq_21078159/article/details/81544950