您的位置:首页 > 其它

事务隔离级别

2016-01-28 00:00 239 查看
摘要: 事务特性ACID,事务4个隔离级别(序列化,可重复读,读已提交,读未提交),锁(排它锁,共享锁),锁协议(3级锁协议)

1、事务特性: ACID

1)A:原子性Atmicty,原子性用于标识事务是否完全地完成,即事务若不能完成事务内所有任务,则应该回滚

2)C:一致性Consistency,事务开启前,结束后,数据都是一致的

3)I:隔离性Isolation,若有两个事务同时进行,事务产生的变化,直到事务完成,才对其他事务可见

4)D:持久性Durability,一旦执行成功,则对系统产生的变化是永久性的

2、隔离级别:从高到低

脏读
不可重复读
幻读
丢失更新
丢失更新2
序列化
N
N
N
N
N
可重复读
N
N
Y
N
N
读已提交
N
Y
Y
N
Y
读未提交
Y
Y
Y
Y
Y
1、丢失更新(Lost update)
两个事务都同时更新一行数据,但是第二个事务却中途失败退出,导致对数据的两个修改都失效了。
2、脏读(Dirty Reads)
一个事务开始读取了某行数据,但是另外一个事务已经更新了此数据但没有能够及时提交。这是相当危险的,因为很可能所有的操作都被回滚。
3、不可重复读(Non-repeatable Reads)
一个事务对同一行数据重复读取两次,但是却得到了不同的结果。同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。
4、二类丢失更新(Second lost updates problem)
无法重复读取的特例。有两个并发事务同时读取同一行数据,然后其中一个对它进行修改提交,而另一个也进行了修改提交。这就会造成第一次写操作失效。
5、幻读(Phantom Reads)
事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查
询中未出现的数据(这里并不要求两次查询的SQL语句相同)。这是因为在两次查询过程中有另外一个事务插入数据造成的。

3、锁

1)排它锁,又叫写锁,X锁:若事务T对对象A上了X锁,则只有T可以对A进行读写,其他事务无法对A添加任何形式的锁,直到T释放X锁后,其他事务才可以进行读写

2)共享锁:又叫读锁,S锁:若事务T对对象A上了S锁,则其他事务只能对A添加S锁,这就保证了其他事务可以对A进行读,但在T释放锁之前,其他事务不能对A进行读写

4、锁协议

1级锁协议:T在修改R之前必须对其加上X锁

是否对应读未提交

2级锁协议:T在修改R之前必须对其加上X锁,在读操作之前必须加S锁,读完即可释放S锁

是否对应读已提交

3级锁协议:T在修改R前加X锁,在读之前必须加S锁,直到事务结束释放S锁

是否对应可重复读
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  隔离级别