MySQLのINSERT ... ON DUPLICATE KEY UPDATE ...構文って、すごく便利ですよね。↓みたいなケースはよく発生すると思うのですが、一つのSQLで書けてしまいます。 レコードが存在しなければ、INSERT。 レコードが既に存在していれば、指定したカラムだけUPDATE。 愚直にやるとSELECTして実在確認してから、INSERTかUPDATEか出しわける、みたいなことになるので、必ず2回のクエリになってしまうところを、1回のクエリでエレガントに書けます。 SQLiteでも似たようなことがしたくて調べたところ、INSERT OR REPLACE ...構文がありました。しかしちょっとやりたいことと違うみたい。 REPLACE構文は、UNIQUE制約/主キーのダブりでINSERTが失敗した場合、邪魔になったレコードを削除してから新しくINSERTしようとします。