参看http://hedengcheng.com/?p=771
Mysql为:
Read uncommittedRead committed //当前读加锁
Repeatable read //其他事务不能插入新记录,解决幻读
Serializable //所有读均为当前读,读写互斥。
DB2:
注意:mysql和db2对幻读的定义不同,DB2中定义为:
non-repeatable read:重读数据减少:
幻读:重读数据增多
Repeatable read: //解决幻读。锁定读事务以任何方式引用的所有行,整个表加S锁。相当于serializable读写用锁互斥
Read stability //read committed。锁定事务实际检索和修改的行。但其他事务可以插入。可以防止db2定义的不可重复读,但有幻读问题。
Cursor stability //防止脏读。其他事务不能更新/删除游标当前所引用的行。可能出现db2定义的不可重复读和幻读
Uncommitted read
总结:
两大问题:幻读(db2定义的不可重复读和幻读其实都是幻读范畴)、脏读
1.如何解读幻读?
mysql细分出两种隔离级别:repeatable read和serializable。而db2在此问题上只有一种隔离级别repeatable read。
2.如何解决脏读?
mysql分出一种隔离级别:read committed,而db2分出两种隔离级别:read stability和cursor stability.