ユニーク値が重複するなら、差し替え or 更新(replace / INSERT - ON DUPLICATE KEY UPDATE)

作成日: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;