【发布时间】:2024-01-07 13:34:01
【问题描述】:
在我们的 Java 应用程序中,我们使用 SQL Server 语句来暂停一些进程。
这是 SQL 语句:
SELECT * FROM MESSAGES WITH (UPDLOCK, ROWLOCK)
WHERE MESSAGES.INTERNAL_ID IN ('6f53448f-1c47-4a58-8839-e126e81130f0');
IN 子句中的 UUID 会随着运行而变化。
这是我们用于锁定的 Java 代码:
entityManager.createNativeQuery(sqlString).getResultList()
上面的 SQL 语句只返回一行。不幸的是,似乎整个表都被锁定了。结果是所有进程都被锁定,即使没有或只有一些应该被阻止。
为什么即使我指定了UPDLOCK,整个表还是被锁定?
附加信息:
-
MESSAGES.INTERNAL_ID是NVARCHAR(255),它不能为空。 否则对列没有约束。 - 隔离级别为
READ_COMMITTED。
【问题讨论】:
-
提供
messages表的定义(ID是主键吗?)你的事务隔离级别是多少? -
@MikhailLobanov 我已将请求的信息添加到问题中。
标签: java sql sql-server locking