「UPSERT」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
(ページの作成:「'''UPSERT'''(読み:あっぷさーと)とは、SQLにおいて「レコードがなければINSERT、あればUPDATE」という処理のこと指す英語で…」)
 
(Administrator がページ「Upsert」を「UPSERT」に移動しました)
(相違点なし)

2020年5月15日 (金) 00:49時点における版

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系命令を持っていなくても利用できる。