db2 隔离级别-总结
程序员文章站
2022-07-15 14:52:32
...
以下为自己总结:
假定有A、B两个事务,
在UR级别下:
A更新某数据,B更新被阻塞,查询可用。
A在事务中更新某数据,即使没有最后commit/rollback,B查询所得数据是A已经操作的数据,导致A如果rollback,B查询的数据不正确,出现脏数据。同理,可能出现“不可重复读”和“幻想”。
在CS级别下:
A更新,B进行读取阻塞(无论是否读取的是A所更新的数据),
A读取,B读取时更新数据,并提交,A再读取,两次结果不同,产生“不可重复读”。如果B是insert数据,将导致“幻像”。
在RS级别下:
A读取数据,B更新被阻塞,因此不会产生“不可重复读”;但B可以insert数据,因此产生“幻像”。
A更新数据,B所有操作被阻塞。——防止“不可重复读”
A新增数据,B所有数据被阻塞。——防止“不可重复读”
在RR级别下:
事务依次进行,所有现象都不会发生。
假定有A、B两个事务,
在UR级别下:
A更新某数据,B更新被阻塞,查询可用。
A在事务中更新某数据,即使没有最后commit/rollback,B查询所得数据是A已经操作的数据,导致A如果rollback,B查询的数据不正确,出现脏数据。同理,可能出现“不可重复读”和“幻想”。
在CS级别下:
A更新,B进行读取阻塞(无论是否读取的是A所更新的数据),
A读取,B读取时更新数据,并提交,A再读取,两次结果不同,产生“不可重复读”。如果B是insert数据,将导致“幻像”。
在RS级别下:
A读取数据,B更新被阻塞,因此不会产生“不可重复读”;但B可以insert数据,因此产生“幻像”。
A更新数据,B所有操作被阻塞。——防止“不可重复读”
A新增数据,B所有数据被阻塞。——防止“不可重复读”
在RR级别下:
事务依次进行,所有现象都不会发生。
上一篇: 网页后退过期的实现