我有一个 ASP.Net 网页,用户在其中选择一行进行编辑。我想在该行上使用行锁,一旦用户完成编辑和更新,另一个用户可以编辑该行,即如何使用行锁,以便只有一个用户可以编辑一行?
谢谢
我有一个 ASP.Net 网页,用户在其中选择一行进行编辑。我想在该行上使用行锁,一旦用户完成编辑和更新,另一个用户可以编辑该行,即如何使用行锁,以便只有一个用户可以编辑一行?
谢谢
您不能使用数据库引擎锁来锁定这样的行。
大多数其他策略将依赖于保持连接打开(例如 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
提示礼貌地要求 SQL Server 持有锁,HOLDLOCK
直到您提交事务。该ROWLOCK
提示礼貌地要求 SQL Server 仅锁定这一行,而不是发出页或表锁定。
请注意,如果有很多行受到影响,SQL Server 将主动升级为页面锁,或者您将拥有一大堆行锁填充服务器的内存并阻碍处理。
SELECT id From mytable WITH (ROWLOCK, UPDLOCK) WHERE id = 1
我想在锁定时与您分享另一个好链接。https://www.mssqltips.com/sqlservertip/1257/processing-data-queues-in-sql-server-with-readpast-and-updlock/
谢谢