您的位置:首页 > 博客中心 > 数据库 >

[转]SQL Server表锁定原理以及如何解除锁定

时间:2022-03-13 23:00

2010年10月13日 12:46 来源:部松昌的博客 作者:部松昌 编辑:胡铭娅

  一: 下面以AdventureWorks2008为示例数据库做简要的说明,过滤掉一般的数据库的共享锁, 作为示例必须要看到锁, 所以用WITH(HOLDLOCK)来保持锁.

  1. Shared locks (S) 共享锁

USE AdventureWorks2008

BEGIN TRAN
select * from Sales.SalesOrderHeader WITH(HOLDLOCK)
where SalesOrderID=‘43662‘ 

    
SELECT resource_type, request_mode, resource_description,request_session_id, DB_NAME(resource_database_id)as resource_database
FROM   sys.dm_tran_locks
WHERE  resource_type <> ‘DATABASE‘

--ROLLBACK TRAN

 

在事务回滚之前, 查看锁的类型:

gxlsystem.com,布布扣

 

  四: 总结

  锁的原理比较抽象,对用户来说是透明的,不用过多的关注. 应用程序一般不直接请求锁. 锁由数据库引擎的一个部件(称为“锁管理器”)在内部管理. 当数据库引擎实例处理Transact-SQL 语句时, 数据库引擎查询处理器会决定将要访问哪些资源. 查询处理器根据访问类型和事务隔离级别设置来确定保护每一资源所需的锁的类型. 然后, 查询处理器将向锁管理器请求适当的锁. 如果与其他事务所持有的锁不会发生冲突, 锁管理器将授予该锁.

热门排行

今日推荐

热门手游