MySQLで下記のクエリーでUPSERT操作ができる。
ON DUPLICATE KEY UPDATE <col> = <val>
upsertとは?
tableにレコードがなければINSERT, 存在すればUPDATEという操作
使い方
下記のクエリーでusersテーブルに新しいユーザーを挿入する。もし該当ユーザーが存在の場合は、deviceを"ios"に、updated_atを今の時間に更新する:
INSERT INTO users
(`user_id`, `username`, `device`, `updated_at`)
VALUES
(1, "foobar", "ios", CURRENT_TIMESTAMP)
ON DUPLICATE KEY UPDATE `device` = "ios", `updated_at` = CURRENT_TIMESTAMP;
usersテーブルのprimary_keyはuser_idという想定
単純の更新ではなく、インクリメント操作もできる:
ゲーム中ユーザーアイテムの数を増やす例
INSERT INTO items
(`user_id`, `item_id`, `qty`)
VALUES
(1, 1, 1)
ON DUPLICATE KEY UPDATE qty = qty + 1;
itemsテーブルのprimary_keyは[user_id, item_id]という想定