SQLite

[SQLite] 동일한 PRIMARY KEY가 이미 있을 경우 INSERT하지 않는 방법

faltoo 2024. 10. 1. 12:32

INSERT OR IGNORE INTO를 사용하면 동일한 PRIMARY KEY가 이미 있을 경우는 무시하고 명령어를 실행한다.

sqlite> CREATE TABLE IF NOT EXISTS User(Id INTEGER PRIMARY KEY,Name TEXT);
sqlite> INSERT INTO User VALUES(1,'Jeff'),(3,'John');
sqlite> INSERT INTO User VALUES(1,'Jiff'),(2,'Smith'),(3,'Julia'),(4,'Kotlin');
Runtime error: UNIQUE constraint failed: User.Id (19)
sqlite> INSERT OR IGNORE INTO User VALUES(1,'Jiff'),(2,'Smith'),(3,'Julia'),(4,'Kotlin');
sqlite> SELECT * FROM User;
1|Jeff
2|Smith
3|John
4|Kotlin

또한, 다음과 같이 ON CONFLICT DO UPDATE SET column1=value1, column2=value2, ... 구문을 사용하여 동일한 PRIMARY KEY로 충돌 시 자신이 원하는 column의 값을 업데이트할 수도 있다.

sqlite> INSERT INTO User(Id,Name) VALUES(1,'Jiff'),(2,'Smiss'),(4,'Python'),(5,'C#') ON CONFLICT DO UPDATE SET Name=excluded.Name;
sqlite> SELECT * FROM User;
1|Jiff
2|Smiss
3|John
4|Python
5|C#

2줄 요약