当前位置: 代码迷 >> Sql Server >> Read Committed级别下,修改数据取得的x锁何时释放
  详细解决方案

Read Committed级别下,修改数据取得的x锁何时释放

热度:91   发布时间:2016-04-24 10:01:04.0
Read Committed级别下,修改数据获得的x锁何时释放
上网查到资料如下,那个描述是正确的????

1、Read Committed级别:指定语句不能读取已由其他事务修改但尚未提交的数据,这样可以避免脏读。其他事务可以在当前事务的各个语句之更改数据,从而产生不可重复读取和幻象数据.在Read Committed事务中读取的数据随时都可能被修改,但已经修改过的数据事业务会一直被锁定,直到事务结束为止。

2、Read Committed级别,读取数据时获得S锁,对于 INSERT、DELETE、UPDATE的执行,获得X锁,完成即释放,并不持有至事务结束。



1、那一个描述是正确的?
2、修改数据获得的x锁何时释放,是否直到这个事务结束。


------解决方案--------------------
仔细分析一下就知道第二种说法明显是错误的,Read Committed避免脏读这一点是没有疑问的,
那么,
事物没有提交之前的INSERT、DELETE、UPDATE是不是脏数据呢,如果事物没有提交(这些操作)就释放X锁,
因为没有了排他锁,这些未提交的数据是不是能被其他会话读取到
这不是不是就冲突了呢

修改数据的X锁,肯定是到这个事物的结束才释放的
------解决方案--------------------
第二种说法是错误的。

在read committed隔离级别下,读取数据时获得S锁,在读完后会立即释放s锁,

而对于 INSERT、DELETE、UPDATE的执行,获得X锁,并持有至事务结束。
  相关解决方案