• ベストアンサー

SQLite:項目が存在しない場合のみINSERT

SQLiteのテーブル内にunique属性を持つフィールドがあります。このフィールドと同名の内容を追加するとエラーが返りますが、SQLiteを呼び出すプログラム側で逐一そのエラーを例外処理しているため、プログラムとしては効率が悪いです。「(If not exist (...) insert ...のような)もしこの項目内容が存在しなければフィールドを追加する」という処理をSQLのクエリ文で完結させたいのですが、このようなことはできますでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.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

Tank2005
質問者

お礼

INSERT OR IGNOREでうまくいけそうです。ありがとうございました。

関連するQ&A