作成日:2023-06-15, 更新日:2023-06-30
基本
primayキーやユニーク索引の設定が必須
▼参考: 「primaryキーとユニーク索引がある場合」「ユニーク索引が複合キーだった」の検証をしてくれている
なければINSERT、あればUPDATE(ON DUPLICATE KEY UPDATE)
クエリ
insert into テーブル (カラム1, カラム2, …) values (値1, 値2, …) on duplicate key update カラム1 = 値1, カラム2 = 値2, …
メモ
プライマリは基本、AUTO_INCREMENTの設定をしているのでinsert文で値はセットしていない
そのため、ユニークの設定をした上で上記クエリを実行
▼「テーブル: table_a」の設定例
- プライマリーキー(AUTO_INCREMENT): id
- ユニークキー(復号): user_id
- ユニークキー(復号): item_key
- 他: value
- 他: created_at
- 他: updated_at
※上記のテーブル構成だったら基本プライマリキーは無くてもOKだけど、サンプルなので記載しておく
やりたいこと
▼存在しないとき
insert into table_a (user_id, item_key, value, created_at, updated_at) values (1, 'name', 'シマウマ', '2023-06-15 09:00:00', '2023-06-15 09:00:00')
▼存在するとき
update table_a set value = 'シマウマ', updated_at = '2023-06-15 09:00:00' where user_id=1 and item_key="name"
合体
▼「user_id=1 and item_key="name"」を検索してinsert or updateさせる
insert into table_a (user_id, item_key, value, created_at, updated_at) values (1, 'name', 'シマウマ', '2023-06-15 09:00:00', '2023-06-15 09:00:00') on duplicate key update value = 'シマウマ', updated_at = '2023-06-15 09:00:00'