SQLですでにレコードがあれば更新、なければ追加をする方法

こんにちは!

今回は、SQLですでにレコードがあれば更新、なければ追加をする方法についてまとめます。

やりたいこと

例えば次のようなfruitsテーブルがあるとします。

fruit_id fruit comment
1 apple 赤い
2 orange すっぱい

このテーブルに「apple」「あまい」というデータを追加したいのですが、 もし「apple」が既に存在した場合は、コメントを上書きしたいとします。

普通にINSERT INTOすると新しくレコードが追加されて次のようになります。

fruit_id fruit comment
1 apple 赤い
2 orange すっぱい
3 apple あまい

しかし、今回は次のような動作をしたいです。

fruit_id fruit comment
1 apple あまい
2 orange すっぱい

SQL

      INSERT INTO fruits
      (fruit, comment)
      VALUES ('apple', 'あまい')
      ON CONFLICT(fruit)
      DO UPDATE
      SET fruit = 'あまい'

このようにON CONFLICTを使用することで実現できました。

おわりに

今回はSQLを組み合わせたプログラムを書くときにやりたかった動作についてまとめました。SQLはまだまだ知らない構文がたくさんあるのでこれからも勉強していきます!

14/100