SQL

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

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

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

ON DUPLICATE KEY UPDATEとは

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

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

ON DUPLICATE KEY UPDATEの使い方

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

この場合では、

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

となります。