다음과 같은 카운터 테이블이 있습니다.
CREATE TABLE cache (
key text PRIMARY KEY,
generation int
);
카운터 중 하나를 늘리거나 해당 행이 아직 존재하지 않는 경우 0으로 설정하고 싶습니다. 표준 SQL에서 동시성 문제없이이 작업을 수행 할 수있는 방법이 있습니까? 작업은 때로는 트랜잭션의 일부이며 때로는 분리되어 있습니다.
SQL은 가능한 경우 SQLite, PostgreSQL 및 MySQL에서 수정되지 않은 상태로 실행되어야합니다.
검색 결과 동시성 문제가 있거나 데이터베이스에 특정한 몇 가지 아이디어가 나왔습니다.
INSERT
새 행을 시도UPDATE
하고 오류가있는 경우. 불행히도의 오류INSERT
는 현재 트랜잭션 을 중단합니다.UPDATE
행, 수정 된 행이없는 경우INSERT
새 행.MySQL에는
ON DUPLICATE KEY UPDATE
절이 있습니다.
편집 : 모든 훌륭한 답변에 감사드립니다. Paul이 옳은 것처럼 보이며이 작업을 수행 할 수있는 단 하나의 휴대용 방법은 없습니다. 그것은 매우 기본적인 작업처럼 들리기 때문에 저에게 매우 놀랍습니다.