5.1SNAPSHOT
SNAPSHOT 在SNAPSHOT隔离级别下,当读取数据时可以保证操作读取的行是事务开始时可用的最后提交版本
同时SNAPSHOT隔离级别也满足前面的已提交读,可重复读,不幻读;该隔离级别实用的不是共享锁,而是行版本控制
使用SNAPSHOT隔离级别首先需要在数据库级别上设置相关选项
5.2READ COMMITTED SNAPSHOT
READ COMMITTED SNAPSHOT也是基于行版本控制,但是READ COMMITTED SNAPSHOT的隔离级别是读操作之前的最后已提交版本,而不是事务前的已提交版本,有点类似前面的READ COMMITTED能保证已提交读,但是不能保证可重复读,不能避免幻读,但是又比 READ COMMITTED隔离级别多出了不需要获取共享锁就可以读取数据,说了理论,下面直接上代码进行分析:
SqlServer【锁】注意事项
一、页锁实例T1: select * from table (paglock)
T2: update table set column1='hello' where id>10
【SqlServer使用事务注意事项,高级程序员必背】说明
T1执行时,会先对第一页加锁,读完第一页后,释放锁,再对第二页加锁,依此类推 。假设前10行记录恰好是一页(当然,一般不可能一页只有10行记录),那么T1执行到第一页查询时,并不会阻塞T2的更新 。
----------------------------------------------------------------------------------------------------
二、行锁实例T1: select * from table (rowlock)
T2: update table set column1='hello' where id=10
说明
T1执行时,对每行加共享锁,读取,然后释放,再对下一行加锁;T2执行时,会对id=10的那一行试图加锁,只要该行没有被T1加上行锁,T2就可以顺利执行update操作 。
----------------------------------------------------------------------------------------------------
三、整表锁实例
T1: select * from table (tablock)
T2: update table set column1='hello' where id = 10
说明
T1执行,对整个表加共享锁 。T1必须完全查询完,T2才可以允许加锁,并开始更新 。
----------------------------------------------------------------------------------------------------
以上是sql锁的一些常用技巧,希望对大家有帮助 。
推荐阅读
- Linux下/etc/skel框架目录的简介与使用
- ssh访问服务器和snap/apt的使用
- 轮胎最高使用寿命10年?事情没你想的那么简单
- 儿童坐车必须使用安全座椅吗 儿童安全座椅乘车是不是更安全
- 搓澡海绵正确使用方法 纳米海绵能用来搓澡吗
- 清洗洗衣机泡腾片的作用与功效 洗衣机泡腾片的作用与功效怎么使用
- 混搭|水乳霜必须成套使用吗?混搭可不可以?真相:各有各的优势
- 如何正确的使用HTML的列表和表单
- 使用Open vSwitch进行第3层路由
- 怎样正确使用空调?
