UPSERT

提供: MonoBook
2020年5月14日 (木) 15:11時点におけるAdministrator (トーク | 投稿記録)による版 (ページの作成:「'''UPSERT'''(読み:あっぷさーと)とは、SQLにおいて「レコードがなければINSERT、あればUPDATE」という処理のこと指す英語で…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

UPSERT(読み:あっぷさーと)とは、SQLにおいて「レコードがなければINSERT、あればUPDATE」という処理のこと指す英語である。

概要

INSERT or UPDATEは非常に煩雑な処理である。

  1. トランザクション開始
  2. SELECT実行(+行ロック)
    1. レコードなければINSERT
    2. レコードがあればUPDATE
  3. トランザクション終了

サーバーでの実装

ここ最近のデータベースサーバーではSQLを独自拡張してUPSERTを1行で書けるようにしているものもある。

SQL Server

MERGE命令

MySQL

INSERT ... ON DUPLICATE KEY UPDATE 構文

ORMでの実装

ここ最近のマイクロORMなんかでは、標準でUPSERT命令を搭載し、煩雑なソースコードを回避できるようにしているものも多い。ほとんどのものはサーバーがUPSERT系命令を持っていなくても利用できる。