Java 응용 프로그램에서는 SQL Server 문을 사용하여 일부 프로세스를 일시 중지합니다. 실행에서 물론 IN
절 변화(UPDLOCK, ROWLOCK)도 전체 테이블을 잠글 수 있습니다. 단 한 행만 선택했습니다.
SELECT * FROM MESSAGES WITH (UPDLOCK, ROWLOCK)
WHERE MESSAGES.INTERNAL_ID IN ('6f53448f-1c47-4a58-8839-e126e81130f0');
UUID를 실행할 :
이
는 SQL 문입니다. 이 우리가 잠금에 사용하는 Java 코드 : 는entityManager.createNativeQuery(sqlString).getResultList()
위의 SQL 문을 하나의 행을 반환합니다. 불행히도 전체 테이블이 잠긴 것처럼 보입니다. 결과적으로 모든 프로세스가 잠기지 않거나 일부만 차단해야하는 결과가 발생합니다.
UPDLOCK
을 지정하더라도 전체 테이블이 잠기는 이유는 무엇입니까?
추가 정보 :
MESSAGES.INTERNAL_ID
이 널 (NULL) 입력하지 않은NVARCHAR(255)
이다. 그렇지 않으면 열에 제약 조건이 없습니다.- 격리 수준은
READ_COMMITTED
입니다.
'messages' 테이블 정의 (ID는 기본 키입니까?) 트랜잭션 격리 수준은 무엇입니까? –
@MikhailLobanov 질문에 요청 된 정보를 추가했습니다. –