SELECT * FROM table WITH (HOLDLOCK) 其他事务可以读取表,但不能更新删除 SELECT * FROM table WITH (TABLOCKX) 其他事务不能读取表,更新和删除
MARK一下,大大的话还不懂,以后再来学习。
是否是什么锁,跟索引还有你update 的行数量是有关系的,比如 update table set ...where sex='男' 这样的语句,你说是什么锁,我觉得一开始可能是行锁,但很快会变为页锁,sex='男'的行太多了,最后变成了表锁.有兴趣加我的qq群32097372
spid dbid ObjId IndId Type Resource Mode Status ------ ------ ----------- ------ ---- -------------------------- -------- ------ 53 1 1115151018 0 TAB IS GRANT显示的结果无法知道是哪个对象,可以使用下面的语句来查看 Select * From sysdatabases where dbid=[dbid] --数据库 Select * from sysobjects where id=[ObjId] --表或其他对象 Select * from sysindexes where id=[IndId] --索引 --此处[]内为表中对应列的值
set column1 = 1
where idx = 1
---------------------
如果你的idx是主键那么就是行级锁
如果不是主键那么是页级索如果 where 条件那么就表级锁了
BEGIN TRAN-- 更新
update table a
set column1 = 1
where idx = 1-- 列出锁信息
EXEC sp_lock @@spid-- 提交或者回滚事务
COMMIT/ROLLBACK TRAN
如果 IndId 为 0 , 表示锁在表上, 否则在对应的索引上
通过 Type 列, 可以确定被锁定的是行/表, 或者是其他, 并且可以通过 Mode 看到是什么锁
在Status 中, 还可以看到锁是已经加上了, 还是在等待其他资源释放(以取得加锁的权利)spid dbid ObjId IndId Type Resource Mode Status
------ ------ ----------- ------ ---- -------------------------- -------- ------
53 1 1115151018 0 TAB IS GRANT
RID = 表中单个行的锁,由行标识符 (RID) 标识。
KEY = 索引内保护可串行事务中一系列键的锁。
PAG = 数据页或索引页的锁。
EXT = 对某区的锁。
TAB = 整个表(包括所有数据和索引)的锁。
DB = 数据库的锁。
FIL = 数据库文件的锁。
APP = 指定的应用程序资源的锁。
MD = 元数据或目录信息的锁。
HBT = 堆或 B 树索引的锁。在 SQL Server 2005 中此信息不完整。
AU = 分配单元的锁。在 SQL Server 2005 中此信息不完整。
------ ------ ----------- ------ ---- -------------------------- -------- ------
53 1 1115151018 0 TAB IS GRANT显示的结果无法知道是哪个对象,可以使用下面的语句来查看
Select * From sysdatabases where dbid=[dbid] --数据库
Select * from sysobjects where id=[ObjId] --表或其他对象
Select * from sysindexes where id=[IndId] --索引
--此处[]内为表中对应列的值
crazycyber:你好!
截至 2011-02-24 03:53:06 前:
你已发帖 35 个, 未结贴 4 个;
结贴率为: 88.57%
[