2017-05-08 16 views
1

MariaDB 서버에 nodejs 웹 서비스가 있고 내 앱에 약 500 명의 일일 활성 사용자가 있습니다. 가 삽입되지 중복 행 초래한다MariaDB REPEATABLE READ 트랜잭션을 사용하는 경우에도 여러 개의 동일한 행이 있습니다.

START TRANSACTION 

-- select to find out the existence of a row -- 
-- if the row doesn't exist, a new row inserted -- 

COMMIT 

이 거래하지만, 그렇지 않습니다 : 내 코드에서

, 나는 다음과 같이 트랜잭션을 사용합니다.
다른 세션이있는 2 개의 요청이 동시에 도착하여 행이 존재하지 않는다는 사실을 알게되면 두 세션 모두이를 삽입한다고 생각합니다.

MariaDB 트랜잭션 격리 수준은 REPEATABLE-READ입니다.

REPEATABLE READ 격리 수준 때문입니까?

다른 세션에서 동일한 행을 읽을 수있을 때 독점적으로 읽기 및 쓰기를 잠그는 방법은 무엇입니까?

INSERT IGNORE ...; 

INSERT ... ON DUPLICATE KEY UPDATE ...; 

가 무엇이 잘못되었는지 설명하기 위해 :

답변

0

대신, '원자'과 같은 트랜잭션에 속하는 다른 문이없는 한 주위 BEGIN/COMMIT을 필요로하지 않는다 어느 쪽이든,이 중 하나를 수행합니다 우리 코드 : SELECTFOR UPDATE이 있어야합니다.