主キーが重複した場合、当然ですがinsertが弾かれてしまいます。
特に外部ファイルを読み込んで入力みたいなケースでは、平気で一意制約に反するデータをよこしてくることもあり、困ることも多々あったりします。
そこで有効なのが、『ON DUPLICATE KEY UPDATE』構文です。
ON DUPLICATE KEY UPDATEとは
insert時に、キーが重複していた場合、update文に切り替えてクエリを実行する構文です。
insert文とupdate文を1つのクエリにまとめてシンプルに書くことができます。
ON DUPLICATE KEY UPDATEの使い方
1 2 3 4 5 6 7 8 |
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を設定
となります。