春树思图南 / sql server / 事务隔离级别

0 0

   

事务隔离级别

2017-04-24  春树思图南
1. 已提交读隔离级别
存在的问题:不可重复读、读取被阻塞。
不可重复读的意思是指,用于读取数据的事务在读取问数据后会立即放弃共享锁,这样的话,就会出现另外的事务来更改数据,更改数据的事务具有排它锁,当这个拥有排它锁的事务提交之前,原来的进行读取数据的事务就会发生阻塞(读取不了,因为排它锁和共享锁不相容),所以我没就要把拥有排它锁的事务提交,使其把排它锁释放,这是读取数据的事务就能进行新的读取,这个时候,读取的数据就可能和第一次读取的数据不一样了,这种读取结果的差异性,就是不可重复读。

现在我们来解决读取阻塞的问题——已提交读快照隔离级别

2.  已提交读快照隔离级别
解决读取阻塞的意思就是说,在其他的拥有排它锁的事务没有提交的情况下,我们依然可以执行读取数据的事务,这是因为已提交读快照隔离级别中,事务的读取操作不为数据项添加共享锁。所以就不存在共享锁和排它锁的冲突。也就不会发生读取阻塞的问题。
虽然已提交读快照隔离级别解决了读取被阻塞的问题,但依然没有解决不可重复读的问题,因为等拥有排它锁的事务提交之后,读取数据的事务再次执行,读取的是更改后的数据,得到的结果和以前的有可能不一样,这就是不可重复读。

现在我们来解决不可重复读的问题——快照隔离级别、可重复读隔离级别

3.  快照隔离级别

快照隔离级别之所以能解决不可重复读的问题是因为,当读取的事务再次执行,读取的依然是更改前的数据(也就是该数据项在更改前最后提交的版本)。那么读取的数据肯定是一样的,这就是可重复读。

4.  可重复读隔离级别

可重复读隔离级别在应用时,进行读取的事务在提交之前是不会释放共享锁的,所以就不允许占有排它锁的更改事务对数据进行更改,所以读取事务的去的数据才能保持一致。
值的注意的是,该隔离级别会出现幻读的情况。(在查询语句的查询范围内插入新的记录)——插入数据的操作不会占用排它锁吗?

现在来解决幻读现象的问题——可序列化隔离级别

5.  可序列化隔离级别

可序列化隔离级别可以阻止在事务读取的范围内插入新行;就是在读取数据的事务没有提交之前,不能进行插入数据的操作(能不能进行数据的删除呢?估计也不能)。




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    猜你喜欢

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多