在我們的Java應用程序內部,我們使用了一個SQL Server語句來暫停某些進程。(UPDLOCK,ROWLOCK)鎖定整個表格甚至只有1行被選中
這是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我已將所要求的信息添加到問題中。 –