MySQL での INSERT… ON DUPLICATE KEY UPDATE の実装
テーブルに新しい行を挿入するときに、その行によって UNIQUE インデックスまたは PRIMARY KEY に重複が発生する場合は、エラーが発生します。これを修正するには、ON DUPLICATE KEY UPDATE を使用します。これを INSERT ステートメントで使用すると、既存の行が新しい値で更新されます。
まずテーブルを作成しましょう。
mysql> create table DemoTable
-> (
-> Value int
-> );
Query OK, 0 rows affected (0.61 sec)
インデックスを作成するクエリは次のとおりです。
mysql> create unique index value_index on DemoTable(Value);
Query OK, 0 rows affected (0.77 sec)
Records: 0 Duplicates: 0 Warnings: 0
insert コマンドを使用してテーブルにいくつかのレコードを挿入します。
mysql> insert into DemoTable values(40) on duplicate key update Value=Value+1000;
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(50) on duplicate key update Value=Value+1000;
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(40) on duplicate key update Value=Value+1000;
Query OK, 2 rows affected (0.15 sec)
select ステートメントを使用してテーブルのすべてのレコードを表示します。
mysql> select *from DemoTable;
これにより、次の出力が生成されます。
+-------+
| Value |
+-------+
| 50 |
| 1040 |
+-------+
2 rows in set (0.00 sec)