반응형
SQLite INSERT-ON DUPLICATE KEY UPDATE (UPSERT)
MySQL에는 다음과 같은 것이 있습니다.
INSERT INTO visits (ip, hits)
VALUES ('127.0.0.1', 1)
ON DUPLICATE KEY UPDATE hits = hits + 1;
이 기능이 SQLite에 존재하지 않는다는 것을 알고있는 한 제가 알고 싶은 것은 두 개의 쿼리를 실행하지 않고도 동일한 효과를 얻을 수있는 방법이 있는지 여부입니다. 또한 이것이 가능하지 않은 경우 선호하는 것은 무엇입니까?
- SELECT + (INSERT 또는 UPDATE) 또는
- UPDATE ( 업데이트가 실패하면 + INSERT )
3.24.0 이후 SQLite는 upsert도 지원 하므로 이제 다음과 같이 간단히 작성할 수 있습니다.
INSERT INTO visits (ip, hits)
VALUES ('127.0.0.1', 1)
ON CONFLICT(ip) DO UPDATE SET hits = hits + 1;
INSERT OR IGNORE INTO visits VALUES ($ip, 0);
UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;
이를 위해서는 "ip"열에 UNIQUE (또는 PRIMARY KEY) 제약 조건이 있어야합니다.
편집 : 또 다른 훌륭한 솔루션 : https://stackoverflow.com/a/4330694/89771 .
나는 선호한다 UPDATE (+ INSERT if UPDATE fails)
. 더 적은 코드 = 더 적은 버그.
현재 답변은 sqlite OR mysql에서만 작동합니다 (OR 사용 여부에 따라 다름). 따라서 dbms 간 호환성을 원하면 다음을 수행합니다.
REPLACE INTO `visits` (ip, value) VALUES ($ip, 0);
단일 값 (방문 수)을 저장하는 단일 키 (IP 주소)이므로이를 위해 memcached를 사용해야합니다. 원자 증분 함수를 사용하여 "경주"조건이 없는지 확인할 수 있습니다.
MySQL보다 빠르며 부하를 줄여 MySQL이 다른 일에 집중할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/2717590/sqlite-insert-on-duplicate-key-update-upsert
반응형
'development' 카테고리의 다른 글
Git Bash가 내 PATH를 보지 못함 (0) | 2020.09.03 |
---|---|
자바 스크립트는 어떻게 Blob을 업로드 할 수 있나요? (0) | 2020.09.03 |
PHP에서 문자열의 시작 부분에 추가하기 위해. =에 해당하는 것이 있습니까? (0) | 2020.09.03 |
C #의 네임 스페이스와 Java의 패키지의 차이점 (0) | 2020.09.03 |
잘못된 http_host 헤더 (0) | 2020.09.03 |