深入解析MS-SQL锁机制

2020-07-10 08:06:22易采站长站整理

在第一个连接中执行以下语句
begin tran
update table1
set A=’aa’
where B=’b2′
waitfor delay ’00:00:30′
update table2
set D=’d5′
where E=’e1′
commit tran


在第二个连接中执行以下语句
begin tran
update table2
set D=’d5′
where E=’e1′
waitfor delay ’00:00:10′
update table1
set A=’aa’
where B=’b2′
commit tran


同时执行,系统会检测出死锁,并中止进程


补充一点:
Sql Server2000支持的表级锁定提示


HOLDLOCK 持有共享锁,直到整个事务完成,应该在被锁对象不需要时立即释放,等于SERIALIZABLE事务隔离级别


NOLOCK 语句执行时不发出共享锁,允许脏读 ,等于 READ UNCOMMITTED事务隔离级别


PAGLOCK 在使用一个表锁的地方用多个页锁


READPAST 让sql server跳过任何锁定行,执行事务,适用于READ UNCOMMITTED事务隔离级别只跳过RID锁,不跳过页,区域和表锁


ROWLOCK 强制使用行锁
TABLOCKX 强制使用独占表级锁,这个锁在事务期间阻止任何其他事务使用这个表
UPLOCK 强制在读表时使用更新而不用共享锁


应用程序锁:
应用程序锁就是客户端代码生成的锁,而不是sql server本身生成的锁


处理应用程序锁的两个过程
sp_getapplock 锁定应用程序资源
sp_releaseapplock 为应用程序资源解锁
注意: 锁定数据库的一个表的区别
SELECT * FROM table WITH (HOLDLOCK) 其他事务可以读取表,但不能更新删除
SELECT * FROM table WITH (TABLOCKX) 其他事务不能读取表,更新和删除

您可能感兴趣的文章:MSSQL与Oracle数据库事务隔离级别与锁机制对比ORACLE锁机制深入理解Oracle数据完整性和锁机制简析MySQL数据库事务隔离级别介绍(Transaction Isolation Level)ORACLE数据库事务隔离级别介绍深入分析MSSQL数据库中事务隔离级别和锁机制

相关文章 大家在看