update from table set xx='aa' where yy='bb'
这里的yy字段不是主键,但值都是唯一的,这样的话,不加 rowlock时update是锁行还是锁表?
sql server中update会加行锁还是表锁?
答案:2 悬赏:0 手机版
解决时间 2021-03-10 15:49
- 提问者网友:浩歌待明月
- 2021-03-09 20:46
最佳答案
- 五星知识达人网友:狂恋
- 2021-03-09 21:04
锁表。
若指定主键,只有一条记录,则锁行。
若不指定,则锁表。
若指定主键,只有一条记录,则锁行。
若不指定,则锁表。
全部回答
- 1楼网友:洒脱疯子
- 2021-03-09 22:43
看表结构, 如果没有主键无法只锁定行
如果要验证的话, 只需要类似下面的方法就行了:
-- 开事务, 以保持锁
begin tran
-- 更新
update table a
set column1 = 1
where idx = 1
-- 列出锁信息
exec sp_lock @@spid
-- 提交或者回滚事务
commit/rollback tran输出的结果大致是这样:
通过 dbid, objid 可以找到你更新的表相关的锁记录
如果 indid 为 0 , 表示锁在表上, 否则在对应的索引上
通过 type 列, 可以确定被锁定的是行/表, 或者是其他, 并且可以通过 mode 看到是什么锁
在status 中, 还可以看到锁是已经加上了, 还是在等待其他资源释放(以取得加锁的权利)
spid dbid objid indid type resource mode status
------ ------ ----------- ------ ---- -------------------------- -------- ------
53 1
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯