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]
という想定