program tip

SQLite“INSERT OR REPLACE INTO”vs.“UPDATE… WHERE”

radiobox 2020. 12. 11. 08:01
반응형

SQLite“INSERT OR REPLACE INTO”vs.“UPDATE… WHERE”


INSERT OR REPLACE INTO names (id, name) VALUES (1, "John")전에 SQL에서 사용 된 구문을 본 적이 없으며 왜 .NET보다 나은지 궁금합니다 UPDATE names SET name = "John" WHERE id = 1. 하나를 다른 것보다 사용하는 합당한 이유가 있습니까? 이 구문은 SQLite에만 해당됩니까?


행이 존재하지 않으면 UPDATE는 아무 작업도 수행하지 않습니다.

행이 존재하지 않으면 INSERT OR REPLACE가 삽입하거나 존재하는 경우 값을 대체합니다.


저는 현재 그러한 성명서에 대해 작업 중이며주의해야 할 또 다른 사실을 알아 냈습니다. INSERT OR REPLACE는 성명서에 제공되지 않은 모든 값을 대체합니다. 예를 들어 테이블에 값을 제공하지 않은 "성"열이 포함 된 경우 INSERT OR REPLACE는 가능한 경우 (제약 조건에서 허용) "성"을 무효화하거나 실패합니다.


REPLACE INTO table(column_list) VALUES(value_list);

더 짧은 형태의

INSERT OR REPLACE INTO table(column_list) VALUES(value_list);

REPLACE가 올바르게 실행 되려면 테이블 구조에 단순 기본 키든 고유 인덱스 든 고유 한 행이 있어야합니다.

REPLACE는 레코드를 삭제 한 다음 INSERT하고 설정 한 경우 INSERT 트리거가 실행되도록합니다. INSERT에 대한 트리거가있는 경우 문제가 발생할 수 있습니다.


속도를 확인하지 않고 ..

INSERT OR IGNORE INTO table (column_list) VALUES(value_list);

뒤에

UPDATE table SET field=value,field2=value WHERE uniqueid='uniquevalue'

이 방법을 사용하면 트리거없이 교체 할 수 있습니다.


삽입 또는 바꾸기 쿼리는 id = 1이 아직없는 경우 새 레코드를 삽입합니다.

업데이트 쿼리는 영역이 존재하는 경우 id = 1 만 oudate하고 존재하지 않는 경우 새 레코드를 생성하지 않습니다.

참고 URL : https://stackoverflow.com/questions/2251699/sqlite-insert-or-replace-into-vs-update-where

반응형