博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLServer之数据库行锁
阅读量:4874 次
发布时间:2019-06-11

本文共 1038 字,大约阅读时间需要 3 分钟。

行锁使用注意事项

1、ROWLOCK行级锁确保在用户取得被更新的行,到该行进行更新,这段时间内不被其它用户所修改。因而行级锁即可保证数据的一致性,又能提高数据操作的并发性。

2、ROWLOCK告诉SQL Server只使用行级锁,ROWLOCK语法可以使用在SELECT,UPDATE和DELETE语句中。

3、ROWLOCK指定通常采用页锁或表锁时,采用行锁。 在从 SNAPSHOT 隔离级别操作的事务中指定时,除非将 ROWLOCK 与需要锁的其他表提示(例如,UPDLOCK 和 HOLDLOCK)组合,否则不会取得行锁。

4、UPDLOCK指定采用更新锁并保持到事务完成。UPDLOCK 仅对行级别或页级别的读操作采用更新锁。 如果将 UPDLOCK 与 TABLOCK 组合使用或出于一些其他原因采用表级锁,将采用排他 (X) 锁。指定 UPDLOCK 时,忽略 READCOMMITTED 和 READCOMMITTEDLOCK 隔离级别提示。 例如,如果将会话的隔离级别设置为 SERIALIZABLE 且查询指定 (UPDLOCK, READCOMMITTED),则忽略 READCOMMITTED 提示且使用 SERIALIZABLE 隔离级别运行事务。

5、HOLDLOCK等同于SERIALIZABLE。HOLDLOCK 仅应用于那些为其指定了 HOLDLOCK 的表或视图,并且仅在使用了 HOLDLOCK 的语句定义的事务的持续时间内应用。 HOLDLOCK 不能被用于包含 FOR BROWSE 选项的 SELECT 语句。

使用T-SQL脚本创建数据库表锁

示例:

第一步:在当前会话中锁定数据行。

--声明数据库引用

use testss;
go

--声明数据库行锁

begin tran tran1
select * from test1 with(rowlock,updlock) where id='1';
waitfor delay '00:00:10';
commit tran;
go

第二步:开启新会话,进行更新锁定数据行。

update test1 set sex='女' where id='1';

示例结果:事务延迟提交十秒,在事务未提交之前进行更新会发生进程阻塞,更新是失败的,事务提交完成后行锁被释放更新才能成功。

 

转载于:https://www.cnblogs.com/vuenote/p/10031227.html

你可能感兴趣的文章
2345网址导航源码 v3.3
查看>>
字典Dictionary
查看>>
JS重要知识点
查看>>
java解析数据
查看>>
Linux下安装多个tomcat
查看>>
UIPickView之自定义生日键盘和城市键盘
查看>>
改变 C/C++ 控制台程序的输出颜色和样式
查看>>
第1章 游戏之乐——让CPU占用率曲线听你指挥
查看>>
laravel入门教程
查看>>
整理大数据期末考试复习提纲--概念整理
查看>>
线程--promise furture 同步
查看>>
Mybatis3.2.3+mysql第一个例子(入门)
查看>>
Nginx 代理配置
查看>>
跟锦数学171217-180630
查看>>
Python之random
查看>>
【IE大叔开玩笑】之——CSS设置IE6中容器高度的BUG
查看>>
转,python的匿名函数lambda解释及用法
查看>>
与FPGA相关的独热码
查看>>
systemd(CentOS7)启动zookeeper
查看>>
测试相关
查看>>