欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQLServer之数据库行锁

程序员文章站 2022-07-28 22:06:51
行锁使用注意事项 1、ROWLOCK行级锁确保在用户取得被更新的行,到该行进行更新,这段时间内不被其它用户所修改。因而行级锁即可保证数据的一致性,又能提高数据操作的并发性。 2、ROWLOCK告诉SQL Server只使用行级锁,ROWLOCK语法可以使用在SELECT,UPDATE和DELETE语 ......

行锁使用注意事项

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';

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

SQLServer之数据库行锁

SQLServer之数据库行锁