mysql 存在しないときはupdate、存在するならinsertってしたい

primayキーやユニーク索引の設定が必須

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

関連項目