sql-server-2008 - sql server中的ROWLOCK

标签 sql-server-2008

我有一个表要更新,在 where 子句中没有索引,所以我在更新脚本中使用 ROWLOCK,希望获得行锁而不是表锁,但没有运气..那么 ROWLOCK 的功能是什么?我在 select 语句中使用它但仍然锁定整个表......太烦人了!

最佳答案

如果您选择太多行 - Sql Server 会将锁升级到表级别。相反,您可能会达到可能锁定计数或内存的上限



您使用 SNAPSHOT隔离级别 - 那么你只能申请 ROWLOCK提示 HOLDLOCKUPDLOCK同时提示

更新:

你可以用

DBCC TRACEON(-1,3604,1200) WITH NO_INFOMSGS;

Here is your statement

DBCC TRACEOFF(-1,3604,1200) WITH NO_INFOMSGS;

并查看 - 在运行期间获取、持有和释放哪些锁

更新 :

DBCC TRACEON (-1, 3604, 1200)

开始传输

更新 [订单]

与(行锁)

设置产品 ID = 3

客户 ID = 1

DBCC 执行完成。如果 DBCC 打印错误消息,请联系您的系统管理员。

进程 54 在 OBJECT 上获取 IX 锁:16:229575856:0 (class bit2000000 ref1) 结果:OK

进程 54 在 PAGE: 16:1:196 (class bit0 ref1) 上获取 IU 锁结果:OK

进程54在RID上获取U锁:16:1:196:0(class bit0 ref1)结果:OK

进程 54 在 PAGE: 16:1:196 (class bit2000000 ref0) 上获取 IX 锁结果:OK

进程 54 在 RID: 16:1:196:0 (class bit2000000 ref0) 上获取 X 锁结果:OK

进程 54 在 RID 上释放锁定引用:16:1:196:0

进程 54 在 RID 上获取 U 锁:16:1:196:1(class bit0 ref1)结果:OK

进程 54 在 RID 上释放锁定:16:1:196:1

进程 54 在 PAGE 上释放锁定引用:16:1:196

(1 行受影响)

关于sql-server-2008 - sql server中的ROWLOCK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8905893/

相关文章:

sql - 多行列值转换为单行

sql-server - 如何将位字段中的真/假计数放入两个单独的列中

sql - 如何在 SQL 语句语法中执行内联 if-then

sql - 事件表和日期范围之间的 t-sql 查询

SQL Server 2008 - 内部联接

sql - 查询以查找列中数据的大小

sql - 在 SQL Server 2008 中,关系会使查询速度更快吗?

sql - 排在最伟大的连胜中?

sql - 从 SQL Server 中的 JOIN 结果中获取不同的行

sql - 不允许保存更改。您所做的更改要求删除并重新创建以下表格