sqlserver 排他锁锁定某行怎么写

sqlserver 排他锁锁定某行怎么写,第1张

锁一个表的某一行 

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

SELECT * FROM table ROWLOCK WHERE id = 1

实例:

--排它锁 

--新建两个连接 

--在第一个连接中执行以下语句 

begin tran 

update table1 

set A='aa' 

where B='b2' 

waitfor delay '00:00:30' --等待30秒 

commit tran 

--在第二个连接中执行以下语句 

begin tran 

select * from table1 

where B='b2' 

commit tran 

--若同时执行上述两个语句,则select查询必须等待update执行完毕才能执行即要等待30秒

排他锁,但是排他锁生存时间非常的短,

1. 当开始更新时首先在表上放一个架构锁,防止其他事务修改架构;

2. 在非序列化隔离级别下,整个表上会放一个意向共享锁,允许其他事务进行读取;

3. 然后事务开始更新这个表,更新是会逐行更新的,你可以把更新理解为一个游标;

4. 每一行上首先放上一个更新锁,成功放置更新锁以后,更新锁会变为排他锁;

5. 然后更新这一行数据,更新完毕后就会释放这一行的排它锁;

6. 整个表遍历完毕后释放架构锁,释放意向共享锁。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/7987325.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存