SQL記述難易度 応用

SQLite で、同じ id の行が既にあれば何もせずに飛ばしたい。空欄に入るキーワードを書いてください。

INSERT OR ____ INTO users(id, name)VALUES (1, 'ann');

正答

正答IGNORE

解説

INSERT OR IGNORE は主キーや UNIQUE 制約に違反する行をエラーにせず黙って飛ばすので、既存の行はそのまま残る。似た INSERT OR REPLACE は既存の行を削除してから新しい行を入れるため、INSERT で指定しなかった列が既定値や NULL に戻り、データが消える。「重複したら何もしない」つもりで REPLACE を使うのは危険。OR ABORT(既定)や OR FAIL はエラーになる。

参考: www.sqlite.org

insertconflictprimary-key

この問題を含む SQL のテストを制限時間つきで解く

SQLクイズへ