레코드가 실제로 삽입되지 않은 경우 sqlite 테이블에 레코드를 삽입하려고합니다. 레코드 삽입 SQLite 쿼리가 존재하지 않는 경우
의이 세 가지 필드 PK, 이름이 있다고 가정 해 봅시다
, 나는 그 이름이 preveously 추가하지 않을 경우 이름으로 새 레코드를 삽입 할주소입니다.
단일 쿼리에서이 작업을 수행 할 수 있습니까? 때로 SQL 쿼리와 약간 다른 것 같습니다.
레코드가 실제로 삽입되지 않은 경우 sqlite 테이블에 레코드를 삽입하려고합니다. 레코드 삽입 SQLite 쿼리가 존재하지 않는 경우
의이 세 가지 필드 PK, 이름이 있다고 가정 해 봅시다
, 나는 그 이름이 preveously 추가하지 않을 경우 이름으로 새 레코드를 삽입 할주소입니다.
단일 쿼리에서이 작업을 수행 할 수 있습니까? 때로 SQL 쿼리와 약간 다른 것 같습니다.
단순히 이름에 고유 색인을 추가하지 않는 이유는 무엇입니까?
네, 하나의 쿼리로이 작업을 수행 할 수 있습니다. 갈등
INSERT는 당신을 도움이 무시 : http://www.sqlite.org/lang_conflict.html
는 이름이 이미 존재하는 경우 레코드를 삽입하려고 할 때,이 충돌을 만듭니다 이름을 고유 키를 넣습니다.
기본값은 ABORT이므로 IGNORE가 없으면 명령문이 오류를 반환합니다. 너가 그것을 원하지 않으면, IGNORE를 사용해라.
sqlite> INSERT INTO 사용자 VALUES (1, 'test', 0) ON CONFLICT IGNORE; SQL 오류 : "ON"근처 : 구문 오류 sqlite> sqlite> INSERT OR IGNORE users VALUES (1, 'test', 0); SQL 오류 : "사용자"근처 : 구문 오류 sqlite> sqlite> INSERT INTO 사용자 VALUES (1, 'test', 0) OR IGNORE; SQL 오류 : 근처 "OR": 구문 오류 당신은 나에게 예를 제공 할 수 있습니다. 그냥 성공적으로 그것을 사용할 수 없습니다. 이미 'test'가 테이블에 없으면이 새로운 레코드를 추가하려고합니다. –
이 문제가 해결되었습니다. 이름 필드에 UNIQUE를 추가하는 중입니다. 이제 SQL 오류가 발생하고 데이터가 추가되지 않습니다. CREATE TABLE 사용자 ('pk'INTEGER PRIMARY KEY, 'name'VARCHAR (100) UNIQUE, 'count'INTEGER); –
사용자에게 삽입 또는 무시 VALUES ... – Konerak
UNIQUE INDEX
을 INSERT INTO
또는 INSERT OR IGNORE INTO
과 함께 사용할 수없는 경우 다음과 같은 검색어를 쓸 수 있습니다.
INSERT INTO table (column)
SELECT value
WHERE NOT EXISTS (SELECT 1
FROM table
WHERE column = value)
CREATE TABLE 사용자 ('PK'INTEGER PRIMARY KEY, '이름'VARCHAR (100), '수'INTEGER) ; 이것은 현재 테이블입니다. 내가 어떻게 바꿀 수 있겠 어. 미안 난 그냥 이해할 수 :( –
그냥 그것을 가지고 이 표 사용자 ('PK'INTEGER PRIMARY KEY, '이름'VARCHAR (100) UNIQUE, '수'INTEGER) CREATE;. 예외를 던지는 것은 당신이 문제를 처리하는 방법이 아니기 때문에 –
을. 당신은 빨리 달릴 질의를 작성하거나 게으르다 수 있습니다. – Dan