「UPSERT」の版間の差分
ナビゲーションに移動
検索に移動
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) (→概要) |
||
5行目: | 5行目: | ||
# トランザクション開始 | # トランザクション開始 | ||
− | # | + | # SELECT実行(+[[行ロック]]) |
## レコードなければINSERT | ## レコードなければINSERT | ||
## レコードがあればUPDATE | ## レコードがあればUPDATE |
2020年5月15日 (金) 00:57時点における最新版
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 〇〇」などとググって調べるのが得策である。