MySQLでInsertもしくはUpdate(ON DUPLICATE KEY UPDATE)

mysqlにはON DUPLICATE KEY UPDATEというのがあるらしい(mysql 4.1.0以降)。
ユニーク制約のあるカラムに、重複の値をinsertしようとすると、かわりに対象レコードがupdateされる。

MySQL 4.1 リファレンスマニュアル :: 6.4.3 INSERT 構文

mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
    -> ON DUPLICATE KEY UPDATE c=c+1;


複合ユニークキーの場合も使えるようです
独立したユニークインデックスが複数はられている場合はダメっぽい。
複合UNIQUEキーでも「INSERT ... ON DUPLICATE KEY UPDATE」構文は使える


他にも似たようなものがあります

  • 重複するキーがあった場合は何もしないIGNORE
INSERT IGNORE INTO table (a, b) VALUES (1, 2);
  • 重複するキーがあった場合は削除してから挿入するREPLACE
REPLACE INTO (a, b) VALUES (1, 2);