- ベストアンサー
SQLite:項目が存在しない場合のみINSERT
SQLiteのテーブル内にunique属性を持つフィールドがあります。このフィールドと同名の内容を追加するとエラーが返りますが、SQLiteを呼び出すプログラム側で逐一そのエラーを例外処理しているため、プログラムとしては効率が悪いです。「(If not exist (...) insert ...のような)もしこの項目内容が存在しなければフィールドを追加する」という処理をSQLのクエリ文で完結させたいのですが、このようなことはできますでしょうか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
field追加(alter table)じゃなくて、「行追加時に、uniqueカラムのデータがかち合ったら追加しない」でいいですか? 「制約競合解決アルゴリズム」を ON CONFLICT で指定します conflict-algorithm ::= ROLLBACK | ABORT | FAIL | IGNORE | REPLACE insert文では、ON CONFLICTの代わりに or で記述できます INSERT OR IGNORE INTO table-name (column-list) VALUES(value-list) 参考 http://www.3rd-impact.net/Document/SQLite/Translation/Current/lang_conflict.html
お礼
INSERT OR IGNOREでうまくいけそうです。ありがとうございました。