UPSERT
UPSERT(読み:あっぷさーと)とは、SQLにおいて「レコードがあればUPDATE、なければINSERT」という一連の処理のこと指すUPDATEとINSERTを超合金合体させた造語である。
概要
INSERT or UPDATEは非常に煩雑な処理である。
- トランザクション開始
- SELECT実行(+行ロック)
- レコードなければINSERT
- レコードがあればUPDATE
- トランザクション終了
ここ最近のデータベースサーバーではSQLを独自拡張してUPSERTを1行で書けるようにしているものもある。
- SQL Server = MERGE命令
- MySQL = INSERT ... ON DUPLICATE KEY UPDATE 構文
また、ここ最近のORMはデータベースサーバー側にUPSERT系命令が非搭載でも利用できるUPSERT命令を搭載していることが多い。煩雑なソースコードを回避できる。
UPSERT命令の名称はSQLにしろ ORMにしろ統一されていないのが特徴である。 ざっくり何個かのORMを調べただけでも全部名称が異なっている。
- Merge
- InsertOrUpdate
- Save
- SaveChanges
このため使用したい製品に関するUPSERT命令は「upsert 〇〇」などとググって調べるのが得策である。