MySQLで無ければINSERTあればUPDATEをするREPLACEコマンド

REPLACE INTO profile (user_id,key,value) VALUES (1, '体重', '1t');な感じで一行で無ければINSERTあればUPDATEをすることができる。これをしなければそれを自分で実装しなければいけない。私はバカなのでアプリケーション側で一旦SELECTをしてから次発行するSQLをif文で振り分けることしか思いつかない。

試しにこのようなSQLを実行してみる

REPLACE INTO profile (`user_id`, `key`, `value`) VALUES (1, '体重', '1t');
REPLACE INTO profile (`user_id`, `key`, `value`) VALUES (1, '年齢', '1000歳');
REPLACE INTO profile (`user_id`, `key`, `value`) VALUES (1, '彼女', 'なし');

結果はちゃんとこうなった

mysql> select * from profile;
+---------+--------+--------+
| user_id | key    | value  |
+---------+--------+--------+
|       1 | 体重   | 1t     |
|       1 | 年齢   | 100歳  |
|       1 | 身長   | 20m    |
|       2 | 体重   | 40kg   |
|       2 | 年齢   | 16歳   |
|       2 | 身長   | 150cm  |
|       3 | 体重   | 40kg   |
|       3 | 年齢   | 12歳   |
|       3 | 身長   | 145m   |
+---------+--------+--------+
9 rows in set (0.00 sec)
mysql> REPLACE INTO profile (`user_id`, `key`, `value`) VALUES (1, '体重', '1t');
Query OK, 1 row affected (0.01 sec)
mysql> REPLACE INTO profile (`user_id`, `key`, `value`) VALUES (1, '年齢', '1000歳');
Query OK, 2 rows affected (0.01 sec)
mysql> REPLACE INTO profile (`user_id`, `key`, `value`) VALUES (1, '彼女', 'なし');
Query OK, 1 row affected (0.01 sec)
mysql> select * from profile;
+---------+--------+---------+
| user_id | key    | value   |
+---------+--------+---------+
|       1 | 体重   | 1t      |
|       1 | 年齢   | 1000歳  |
|       1 | 彼女   | なし    |
|       1 | 身長   | 20m     |
|       2 | 体重   | 40kg    |
|       2 | 年齢   | 16歳    |
|       2 | 身長   | 150cm   |
|       3 | 体重   | 40kg    |
|       3 | 年齢   | 12歳    |
|       3 | 身長   | 145m    |
+---------+--------+---------+
10 rows in set (0.01 sec)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA