반응형
sqlite-INSERT 또는 IGNORE가 작동하도록하는 방법
테이블에 데이터를 삽입하려고합니다. 다른 열에 관계없이 열에 데이터가없는 경우 행을 삽입하고 싶습니다.
CREATE TABLE t (
id INTEGER PRIMARY KEY,
name VARCHAR,
other INT
);
INSERT OR IGNORE INTO t (name) VALUES ('a');
INSERT OR IGNORE INTO t (name) VALUES ('a');
INSERT OR IGNORE INTO t (name) VALUES ('a');
위의 스 니펫을 사용하면 내가 생각했던 것처럼 1 개가 아닌 3 개의 행으로 끝납니다. 실제 SQL이 INSTEAD OF INSERT
트리거 내부에서 발생하는 것이 중요하다면 이것은 단순한 테스트 사례입니다.
바꾸다
CREATE TABLE t (
id INTEGER PRIMARY KEY,
name VARCHAR,
other INT
);
와
CREATE TABLE t (
id INTEGER PRIMARY KEY,
name VARCHAR UNIQUE,
other INT
);
그럼 당신은 얻을 것입니다
sqlite> CREATE TABLE t (
...> id INTEGER PRIMARY KEY,
...> name VARCHAR UNIQUE,
...> other INT
...> );
sqlite> INSERT OR IGNORE INTO t (name) VALUES ('a');
sqlite> INSERT OR IGNORE INTO t (name) VALUES ('a');
sqlite> INSERT OR IGNORE INTO t (name) VALUES ('a');
sqlite> select * from t ;
1|a|
이는 기본 키 필드 또는 고유 제약 조건에서만 작동합니다.
선택적인 충돌 절은이 하나의 INSERT 명령 동안 사용할 대체 제약 충돌 해결 알고리즘의 사양을 허용합니다 .
더욱이:
ON 충돌 절은 UNIQUE와 NOT NULL 제약 (이 섹션의 목적을 위해 UNIQUE 제약과 같은 일이다 PRIMARY KEY 제약에)을 적용합니다. ON CONFLICT 알고리즘은 FOREIGN KEY 제약 조건에 적용되지 않습니다. ROLLBACK, ABORT, FAIL, IGNORE 및 REPLACE의 다섯 가지 충돌 해결 알고리즘 선택이 있습니다. 기본 충돌 해결 알고리즘은 ABORT입니다.
참조 URL : https://stackoverflow.com/questions/12105198/sqlite-how-to-get-insert-or-ignore-to-work
반응형
'UFO ET IT' 카테고리의 다른 글
ARCHIVE 중에 만 Xcode-Increment 빌드 번호? (0) | 2021.01.14 |
---|---|
이미 설치된 hstore 확장으로 새 데이터베이스를 만드는 방법은 무엇입니까? (0) | 2021.01.14 |
무 방향 그래프에서 모든주기 찾기 (0) | 2021.01.14 |
쿼리에 대한 sqlalchemy가 있습니다. (0) | 2021.01.13 |
HttpPost에서 매개 변수를 사용하는 방법 (0) | 2021.01.13 |