Posted on

MySQLで新規追加と更新を同時に出来るSQL文

データベースのテーブルに対して、

・指定したキーのデータが存在していないなら追加したいが、あるのなら内容を更新したい

ということがあると思います。

そういう時、普通にプログラムで処理すると

1.SELECT文でデータの存在確認
2.データが存在しないならINSERT文で新規追加
3.データが存在するならUPDATE文で上書き

となると思います。

これでももちろん問題はないのですが、MySQL上で1.2.3.を一文で行うSQLも存在します。

INSERT INTO tbl_name (col_name1, col_name2, ...) VALUES (value1, value2, ...)
ON DUPLICATE KEY UPDATE col_name_x=value_x, col_name_y=value_y, ...;

1行目は普通のINSERT文です。
2行目が主キーなどのユニーク制約に抵触した場合に行われる処理で、該当キーのデータにUPDATE以下の内容を設定します。

知ってるか知らないかの違いですが、プログラムも見やすくなったり、SQL文を発行する回数が減ることで場合によってはパフォーマンスも上がります。

よろしければご活用くださいませ☆

※ON DUPLICATE はMySQLサーバでだけ使える句のようです。POSTGRES、SQL SERVER等では別の書き方をしないといけないようなのでご注意ください。