programing

잠금을 시도할 때 교착 상태가 발견되지 않도록 합니다. 중복 키 업데이트 시 MariaDB(MySQL) INSERT에서 트랜잭션을 다시 시작해 보십시오.

bestprogram 2023. 8. 20. 12:19

잠금을 시도할 때 교착 상태가 발견되지 않도록 합니다. 중복 키 업데이트 시 MariaDB(MySQL) INSERT에서 트랜잭션을 다시 시작해 보십시오.

저는 줄이 많은 간단한 테이블을 가지고 있습니다.외부 키가 없습니다.여러 열에 하나의 고유한 키가 있습니다.

다음은 삽입 문의 예입니다.

INSERT INTO das_args (a,b,c,d) VALUES (1,2,3,4) ON DUPLICATE KEY UPDATE VALUES(1,2,3,4)

고유 키는 (a,b,c)입니다.

오류:

(1213, 'Deadlock found when trying to get lock; try restarting transaction')

나는 mysql '잠금을 시도할 때 Deadlock found: 트랜잭션 다시 시작하기'를 피하는 방법을 읽었는데, 이는 다른 사용 사례에서 트리거되는 동일한 오류 메시지에 대한 훌륭한 토론입니다.

자동 커밋은 참입니다.이것이 유일한 진술입니다.BEGIN 또는 COMMIT가 없습니다.

제가 이걸 리팩터링 할 수 있는 방법이 없어요.동일한 고유 키를 동시에 업데이트하는 것으로 보이는 클라이언트가 두 개뿐입니다.내 코드가 문을 다시 실행하면 성공하지만 교착 상태 오류를 제거하고 싶습니다.

먼저, 구문은 다음과 같습니다.

INSERT INTO das_args (a,b,c,d)
    VALUES (1,2,3,4)
    ON DUPLICATE KEY UPDATE  d = VALUES(d);

교착 상태에 대해서는 -- 트랜잭션에 하나 이상의 문이 있는 것 같습니다.어디 보자꾸나BEGIN을 통하여COMMIT.

의 가치는 무엇입니까?autocommit?

언급URL : https://stackoverflow.com/questions/59142436/avoid-deadlock-found-when-trying-to-get-lock-try-restarting-transaction-on-mari