반복 가능 읽기 트랜잭션을 사용하는 경우에도 MariaDB 여러 개의 동일한 행
저는 MariaDB 서버와 약 500명의 일일 활성 사용자가 있는 nodejs 웹 서비스를 가지고 있습니다.
내 코드에서 나는 아래와 같은 트랜잭션을 사용합니다.
START TRANSACTION
-- select to find out the existence of a row --
-- if the row doesn't exist, a new row inserted --
COMMIT
이 트랜잭션은 중복 행을 삽입하지 않아야 하지만 삽입하지 않습니다.
세션이 다른 2개의 요청이 동시에 도착하여 행이 존재하지 않는 것을 확인한 후 두 세션이 모두 해당 행을 삽입할 때 발생하는 것으로 생각합니다.
MariaDB 트랜잭션 격리 수준은 반복 가능-읽기입니다.
이것은 반복 가능 읽기 분리 수준 때문입니까?
다른 세션이 동일한 행을 읽을 수 있을 때 읽기 및 쓰기를 독점적으로 잠그는 방법은 무엇입니까?
대신, 이것들 중 하나를 수행하십시오. 둘 중 하나는 '원자적'이고 필요하지 않습니다.BEGIN/COMMIT
동일한 트랜잭션에 속하는 다른 문이 없는 한 다음과 같습니다.
INSERT IGNORE ...;
INSERT ... ON DUPLICATE KEY UPDATE ...;
우리 코드의 문제점을 설명하기 위해:당신은 했어야 했어요.FOR UPDATE
에서SELECT
.
언급URL : https://stackoverflow.com/questions/43844519/mariadb-multiple-identical-row-even-when-using-repeatable-read-transaction
'programing' 카테고리의 다른 글
추가 열 ASP를 사용하여 사용자 역할 기본 키를 확장합니다.NET 코어 EF (0) | 2023.09.01 |
---|---|
호버에 굵게 표시된 경우 인라인 요소가 이동합니다. (0) | 2023.09.01 |
j변수에 로드 쿼리 (0) | 2023.09.01 |
jQuery AJAX 오류를 어떻게 잡을 수 있습니까? (0) | 2023.09.01 |
준비된 진술서, 상환청구서 및 성과 고려사항 (0) | 2023.09.01 |