SQL 服务器:锁定 table 以阻止其他会话尝试读取 table
SQL Server : lock table to block other sessions trying to read the table
我需要能够在 SQL 服务器中锁定 table,同时做一些工作。锁需要阻止其他会话读取 table。工作完成后,需要解锁 table。
在 MySQL 中,我使用了:
LOCK TABLES [table] WRITE
此时其他会话尝试从 table 读取时将被阻止,直到 table 解锁。
UNLOCK TABLES
现在阻塞将停止。
这在 SQL 服务器中可行吗?
BEGIN TRANSACTION
SELECT TOP 1 1 FROM TableName WITH (TABLOCKX)
/* do your stuff here */
COMMIT TRANSACTION
TABLOCKX
将获得 table 上的独占锁,其他用户将无法读取或更新数据,直到您自己提交事务。
编辑
与其像我之前建议的那样做 SELECT *
,不如做 SELECT TOP 1 1
它会在 table 上获得独占锁,并且不会浪费任何时间返回实际数据,例如一个 SELECT *
就可以了。
我需要能够在 SQL 服务器中锁定 table,同时做一些工作。锁需要阻止其他会话读取 table。工作完成后,需要解锁 table。
在 MySQL 中,我使用了:
LOCK TABLES [table] WRITE
此时其他会话尝试从 table 读取时将被阻止,直到 table 解锁。
UNLOCK TABLES
现在阻塞将停止。
这在 SQL 服务器中可行吗?
BEGIN TRANSACTION
SELECT TOP 1 1 FROM TableName WITH (TABLOCKX)
/* do your stuff here */
COMMIT TRANSACTION
TABLOCKX
将获得 table 上的独占锁,其他用户将无法读取或更新数据,直到您自己提交事务。
编辑
与其像我之前建议的那样做 SELECT *
,不如做 SELECT TOP 1 1
它会在 table 上获得独占锁,并且不会浪费任何时间返回实际数据,例如一个 SELECT *
就可以了。