MysqlでInsertとUpdateを1度に処理する(ON DUPLICATE KEY UPDATE)
WEBサイトを開発していると、データがないときはINSERT , ある時はUPDATEしたい時があります。そんな時、条件分岐などの処理を書かなくても1度に処理できる方法を紹介します。
使い方
レコード(行)がなかったらINSERTあったらUPDATEという処理を1度に実行します。そのレコードのあるなしを判断するために、primary key や インデックスを指定しておく必要があります。
1 2 3 4 5 6 | INSERT INTO table (a, b, c) VALUES (1, 10, 100) ON DUPLICATE KEY UPDATE b = 50, c = 150; |
a=1の行がなかった場合
a=1,b=10,c=100 の行が追加
a=1の行が既にあった場合
a=1の行がa=1,b=50,c=150に更新
注意点
- テーブルにprimary keyか、uniqueインデックスを指定しておかなければ ON DUPLICATE KEY UPDATE は利用できません。
- primary key uniqueインデックスが複数行に一致する場合、MySQL は1行のみ更新されます。
- ON DUPLICATE KEY UPDATE は MySQL の拡張であり、他のデータベースでは利用できません。
Author Profile
スターフィールド編集部
SHARE