Dav*_*vid 5 t-sql sql-server locking pessimistic-locking
我有一个ASP.Net网页,用户选择一行进行编辑.我想在该行上使用行锁,一旦用户完成编辑和更新,另一个用户就可以编辑该行,即如何使用rowlock以便只有一个用户可以编辑一行?
谢谢
您不能使用数据库引擎锁来锁定这样的行。
大多数其他策略将依赖于保持连接打开(例如 sp_getapplock),这在 Web 应用程序中是荒谬的。
即使你在行上设置了一个标志,如果用户只是在编辑中关闭浏览器会发生什么?
我建议使用时间戳/行版本列来检测其他会话中行的更改。
在这里,我在 select 语句期间提供了两组 sql 来行锁。
BEGIN TRAN
SELECT *
FROM authors AU
WITH (HOLDLOCK, ROWLOCK)
WHERE AU.au_id = '274-80-9391'
/* Do all your stuff here while the row is locked */
COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)
该HOLDLOCK提示礼貌地要求 SQL Server 保持锁定,直到您提交事务。该ROWLOCK提示礼貌地要求 SQL Server 仅锁定该行,而不是发出页或表锁定。
请注意,如果大量行受到影响,要么 SQL Server 将采取主动并升级为页锁,要么您将有一大群行锁填满您的服务器的内存并使处理陷入困境。
SELECT id From mytable WITH (ROWLOCK, UPDLOCK) WHERE id = 1
Run Code Online (Sandbox Code Playgroud)
我想与您分享锁定的另一个好链接。 https://www.mssqltips.com/sqlservertip/1257/processing-data-queues-in-sql-server-with-readpast-and-updlock/
谢谢
| 归档时间: |
|
| 查看次数: |
8558 次 |
| 最近记录: |