概要
insert or ignore 構文を使う方法のメモ
insert or ignore を使うと Primary key や Unique で 重複するレコードを挿入しようとした場合、 以下のような処理分岐をしてくれる。
重複するレコードがある場合 | 何もしない |
重複するレコードがない場合 | そのまま「新規挿入(insert)」 |
環境
- Windows 10
- sqlite3 (3.30.0) Command-Line Shell
insert or ignore 構文の例
id primary key autoincrement |
name not null |
quantity default 0 |
remark |
---|---|---|---|
1 | tomato | 100 | |
2 | potato | 120 | |
3 | pumpkin | 50 | (Comment...) |
キーの重複が無ければ、通常通り追加する
sqlite> insert or ignore into product
( id ,name ,quantity ,remark )
values
( 4 ,'carrot' ,30 ,'' )
;
id primary key autoincrement |
name not null |
quantity default 0 |
remark |
---|---|---|---|
1 | tomato | 100 | |
2 | potato | 120 | |
3 | pumpkin | 50 | (Comment...) |
4 | carrot | 30 |
キーの重複があった場合、無視する
sqlite> insert or ignore into product
( id ,name ,quantity ,remark )
values
( 3 ,'carrot' ,30 ,'' )
;
id primary key autoincrement |
name not null |
quantity default 0 |
remark |
---|---|---|---|
1 | tomato | 100 | |
2 | potato | 120 | |
3 | pumpkin | 50 | (Comment...) |
ignore 文にしなかった場合、エラーになる
sqlite> insert into product
( id ,name ,quantity ,remark )
values
( 3 ,'carrot' ,30 ,'' )
;
Error: table product has no column named id
複数データを追加する場合、キーの重複が無いデータだけ登録される
sqlite> insert or ignore into product
( id ,name, quantity ,remark )
values
( 3 ,'carrot' ,30 ,'' )
, ( 4 ,'apple' ,40 ,'' )
, ( 5 ,'spinach' ,130 ,'' )
;
id primary key autoincrement |
name not null |
quantity default 0 |
remark |
---|---|---|---|
1 | tomato | 100 | |
2 | potato | 120 | |
3 | pumpkin | 50 | (Comment...) |
4 | apple | 40 | |
5 | spinach | 130 |
参考・関連 URL
-
SQLite 公式サイト(英語)
https://www.sqlite.org/index.html -
SQLite Query Language: INSERT(英語)
公式のINSERT構文に関するドキュメント
https://www.sqlite.org/lang_insert.html -
SQLite Query Language: ON CONFLICT clause(英語)
キー重複時の振舞いに関するドキュメント
https://sqlite.org/lang_conflict.html