作成日:2020-05-01, 更新日:2020-05-01
REPLACE構文
ユニーク値が重複するなら、元を削除して新規保存
元になるテーブル
CREATE TABLE `hoge` ( `id` bigint(20) UNSIGNED NOT NULL, `item_name` text NOT NULL, `item_cnt` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; ALTER TABLE `hoge` ADD UNIQUE KEY `id` (`id`); INSERT INTO hoge VALUES (1, '鶏精', '1');
id(ユニーク) | item_name | item_cnt |
---|---|---|
1 | 鶏精 | 1 |
INSERT / REPLACE
INSERT
▼下記クエリを実行すると「hoge.id=1」がすでに存在するのでduplicateエラーになる。
INSERT INTO hoge VALUES (1, '鶏精', '2');
REPLACE文
▼「hoge.id=1」をDELETEしてからINSERTする
REPLACE INTO hoge VALUES (1, '鶏精', '2');
▼結果
id(ユニーク) | item_name | item_cnt |
---|---|---|
1 | 鶏精 | 2 |
INSERT ... ON DUPLICATE KEY UPDATE構文
ユニーク値が重複するなら、元を削除せずに更新
▼下記のようにした場合
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=〇;
▼「UNIQUE:a」のとき、下記と同じ
UPDATE table SET c=c+1 WHERE a=1;
▼「UNIQUE:a、b」のとき、下記と同じ
UPDATE table SET c=〇 WHERE a=1 OR b=2 LIMIT 1;