隔离级别 脏读 不可重复读 幻读
未提交读(Uncommitted Read) 是 是 是
游标稳定性(Cursor Stability) 否 是 否
读稳定性(Read Stability) 否 否 是
可重复读(Repeatable Read) 否 否 否
未提交读(Uncommitted Read):select不加任何锁,如果一行正在更新但未提交,内存里有两行的,一行是更新前的加了S锁,一行是更新后的加了X锁,未提交读直接读更新后的行。
这就是脏读,因为未提交的数据随时有可能回退,一旦回退,读取的数据肯定是无效的。
游标稳定性(Cursor Stability):如果一行正在更新但未提交,它不会等待X行的S锁,直接读取更新前的行,读完了就释放了,这时候就出现不稳定读了,等同一事务下次再读的时候发现
同一行读出来的数据不一样了。
读稳定性(Read Stability) :如果一行正在更新但未提交,他会一直等待更新后行的S锁,这个时候就能保证读稳定性。但是不能避免出现幻读,幻读就是下一次再读的时候数据库
插入了新数据,读稳定性针对的是某一行数据
可重复读(Repeatable Read) : 可重复读是即解决了读稳定性也解决了幻读问题,直接在表上加IS锁,不能更新也不能插入。
db2 "select ..... with ur"
db2 "select ..... with cs" //默认的隔离级别,可以不写with cs
db2 "select ..... with rs"
db2 "select ..... with rr"