メインメニューを開く

差分

UPSERT

1,049 バイト追加, 2020年5月14日 (木) 15:11
ページの作成:「'''UPSERT'''(読み:あっぷさーと)とは、SQLにおいて「レコードがなければINSERT、あればUPDATE」という処理のこと指す英語で…」
'''UPSERT'''(読み:あっぷさーと)とは、[[SQL]]において「レコードがなければINSERT、あればUPDATE」という処理のこと指す英語である。

== 概要 ==
INSERT or UPDATEは非常に煩雑な処理である。

# トランザクション開始
# SELECT実行(+行ロック)
## レコードなければINSERT
## レコードがあればUPDATE
# トランザクション終了

== サーバーでの実装 ==
ここ最近のデータベースサーバーでは[[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

== ORMでの実装 ==
ここ最近のマイクロORMなんかでは、標準でUPSERT命令を搭載し、煩雑な[[ソースコード]]を回避できるようにしているものも多い。ほとんどのものはサーバーがUPSERT系命令を持っていなくても利用できる。