SQL PR

【MySQL】insertでキーが重複した場合に勝手にupdateに切り替える

記事内に商品プロモーションを含む場合があります

主キーが重複した場合、当然ですがinsertが弾かれてしまいます。
特に外部ファイルを読み込んで入力みたいなケースでは、平気で一意制約に反するデータをよこしてくることもあり、困ることも多々あったりします。

そこで有効なのが、『ON DUPLICATE KEY UPDATE』構文です。

ON DUPLICATE KEY UPDATEとは

insert時に、キーが重複していた場合、update文に切り替えてクエリを実行する構文です。

insert文とupdate文を1つのクエリにまとめてシンプルに書くことができます。

ON DUPLICATE KEY UPDATEの使い方

INSERT INTO hoge(key, param1, param2, param3) VALUES
  ('key001', 'fuga001', 'var001', 'spam001'),
  ('key002', 'fuga002', 'var002', 'spam002'),
  ('key003', 'fuga003', 'var003', 'spam003')
ON DUPLICATE KEY UPDATE
  param1 = '0'
  , param2 = '0'
  , param3 = '0'

insert文は通常と変わりありません。
ON DUPLICATE KEY UPDATE文以降に、主キー重複が発生した場合に実行したいupdate文を書きます。

この場合では、

重複なしの場合insert文を実行
重複ありの場合各カラムに0を設定

となります。