メインメニューを開く

UPSERT(読み:あっぷさーと)とは、SQLにおいて「レコードがあればUPDATE、なければINSERT」という一連の処理のこと指すUPDATEとINSERTを超合金合体させた造語である。

概要編集

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

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

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

また、ここ最近のORMはデータベースサーバー側にUPSERT系命令が非搭載でも利用できるUPSERT命令を搭載していることが多い。煩雑なソースコードを回避できる。

UPSERT命令の名称はSQLにしろ ORMにしろ統一されていないのが特徴である。 ざっくり何個かのORMを調べただけでも全部名称が異なっている。

  • Merge
  • InsertOrUpdate
  • Save
  • SaveChanges

このため使用したい製品に関するUPSERT命令は「upsert 〇〇」などとググって調べるのが得策である。