UPSERT
2020年5月15日 (金) 00:49時点におけるAdministrator (トーク | 投稿記録)による版 (Administrator がページ「Upsert」を「UPSERT」に移動しました)
UPSERT(読み:あっぷさーと)とは、SQLにおいて「レコードがなければINSERT、あればUPDATE」という処理のこと指す英語である。
概要
INSERT or UPDATEは非常に煩雑な処理である。
- トランザクション開始
- SELECT実行(+行ロック)
- レコードなければINSERT
- レコードがあればUPDATE
- トランザクション終了
サーバーでの実装
ここ最近のデータベースサーバーではSQLを独自拡張してUPSERTを1行で書けるようにしているものもある。
SQL Server
MERGE命令
MySQL
INSERT ... ON DUPLICATE KEY UPDATE 構文
ORMでの実装
ここ最近のマイクロORMなんかでは、標準でUPSERT命令を搭載し、煩雑なソースコードを回避できるようにしているものも多い。ほとんどのものはサーバーがUPSERT系命令を持っていなくても利用できる。