ウェブサイト検索

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)

関連記事: