MySQL独自のREPLACE文

指定した主キーを持つレコードがテーブルに存在しなければレコードを追加し、存在している場合はそのレコードを削除したうえで追加します。

mysql> REPLACE t_syohin VALUES
    -> ('100C02','コンパクトフラッシュ2G','CF',20000);
Query OK, 1 row affected (0.08 sec)

mysql> select * from t_syohin;
+--------+------------------------+-------+-------+
| shcd   | shname                 | kigou | tanka |
+--------+------------------------+-------+-------+
| 100001 | USBメモリー128         | USBM  |  2400 |
| 100002 | USBメモリー256         | USBM  |  3500 |
| 100003 | USBメモリー512         | USBM  |  5000 |
| 100101 | SDメモリーカード128    | SDMC  |  2300 |
| 100102 | SDメモリーカード256    | SDMC  |  4900 |
| 100103 | SDメモリーカード512    | SDMC  |  5400 |
| 100201 | スマートメディア32     | SM    |  1200 |
| 100202 | スマートメディア64     | SM    |  2500 |
| 100203 | スマートメディア128    | SM    |  5400 |
| 100C01 | コンパクトフラッシュ   | 1GCF  |  8200 |
| 100C02 | コンパクトフラッシュ2G | CF    | 20000 |
+--------+------------------------+-------+-------+
11 rows in set (0.00 sec)

mysql> REPLACE t_syohin VALUES
    -> ('100C02','コンパクトフラッシュ2G','CF',18000);
Query OK, 2 rows affected (0.04 sec)

mysql> select * from t_syohin;
+--------+------------------------+-------+-------+
| shcd   | shname                 | kigou | tanka |
+--------+------------------------+-------+-------+
| 100001 | USBメモリー128         | USBM  |  2400 |
| 100002 | USBメモリー256         | USBM  |  3500 |
| 100003 | USBメモリー512         | USBM  |  5000 |
| 100101 | SDメモリーカード128    | SDMC  |  2300 |
| 100102 | SDメモリーカード256    | SDMC  |  4900 |
| 100103 | SDメモリーカード512    | SDMC  |  5400 |
| 100201 | スマートメディア32     | SM    |  1200 |
| 100202 | スマートメディア64     | SM    |  2500 |
| 100203 | スマートメディア128    | SM    |  5400 |
| 100C01 | コンパクトフラッシュ   | 1GCF  |  8200 |
| 100C02 | コンパクトフラッシュ2G | CF    | 18000 |
+--------+------------------------+-------+-------+
11 rows in set (0.00 sec)