「UPSERT」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
(Administrator がページ「Upsert」を「UPSERT」に移動しました)
1行目: 1行目:
'''UPSERT'''(読み:あっぷさーと)とは、[[SQL]]において「レコードがなければINSERT、あればUPDATE」という処理のこと指す英語である。
+
'''UPSERT'''(読み:あっぷさーと)とは、[[SQL]]において「レコードがあればUPDATE、なければINSERT」という一連の処理のこと指すUPDATEとINSERTを超合金合体させた造語である。
  
 
== 概要 ==
 
== 概要 ==
10行目: 10行目:
 
# トランザクション終了
 
# トランザクション終了
  
== サーバーでの実装 ==
 
 
ここ最近のデータベースサーバーでは[[SQL]]を独自拡張してUPSERTを1行で書けるようにしているものもある。
 
ここ最近のデータベースサーバーでは[[SQL]]を独自拡張してUPSERTを1行で書けるようにしているものもある。
 +
* SQL Server = MERGE命令
 +
* MySQL = INSERT ... ON DUPLICATE KEY UPDATE 構文
 +
*: https://dev.mysql.com/doc/refman/5.6/ja/insert-on-duplicate.html
  
=== SQL Server ===
+
また、ここ最近の[[ORM]]はデータベースサーバー側にUPSERT系命令が非搭載でも利用できるUPSERT命令を搭載していることが多い。煩雑な[[ソースコード]]を回避できる。
MERGE命令
 
  
=== MySQL ===
+
UPSERT命令の名称はSQLにしろ ORMにしろ統一されていないのが特徴である。
INSERT ... ON DUPLICATE KEY UPDATE 構文
+
ざっくり何個かのORMを調べただけでも全部名称が異なっている。
 +
* Merge
 +
* InsertOrUpdate
 +
* Save
 +
* SaveChanges
  
* https://dev.mysql.com/doc/refman/5.6/ja/insert-on-duplicate.html
+
このため使用したい製品に関するUPSERT命令は「upsert 〇〇」などと[[ググって]]調べるのが得策である。
 
 
== ORMでの実装 ==
 
ここ最近のマイクロORMなんかでは、標準でUPSERT命令を搭載し、煩雑な[[ソースコード]]を回避できるようにしているものも多い。ほとんどのものはサーバーがUPSERT系命令を持っていなくても利用できる。
 

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

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 〇〇」などとググって調べるのが得策である。