「UPSERT」の版間の差分
Administrator (トーク | 投稿記録) ページの作成:「'''UPSERT'''(読み:あっぷさーと)とは、SQLにおいて「レコードがなければINSERT、あればUPDATE」という処理のこと指す英語で…」 |
Administrator (トーク | 投稿記録) |
||
| (同じ利用者による、間の2版が非表示) | |||
| 1行目: | 1行目: | ||
'''UPSERT'''(読み:あっぷさーと)とは、[[SQL]] | '''UPSERT'''(読み:あっぷさーと)とは、[[SQL]]において「レコードがあればUPDATE、なければINSERT」という一連の処理のこと指すUPDATEとINSERTを超合金合体させた造語である。 | ||
== 概要 == | == 概要 == | ||
| 5行目: | 5行目: | ||
# トランザクション開始 | # トランザクション開始 | ||
# | # SELECT実行(+[[行ロック]]) | ||
## レコードなければINSERT | ## レコードなければINSERT | ||
## レコードがあればUPDATE | ## レコードがあればUPDATE | ||
# トランザクション終了 | # トランザクション終了 | ||
ここ最近のデータベースサーバーでは[[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 | |||
また、ここ最近の[[ORM]]はデータベースサーバー側にUPSERT系命令が非搭載でも利用できるUPSERT命令を搭載していることが多い。煩雑な[[ソースコード]]を回避できる。 | |||
UPSERT命令の名称はSQLにしろ ORMにしろ統一されていないのが特徴である。 | |||
ざっくり何個かのORMを調べただけでも全部名称が異なっている。 | |||
* Merge | |||
* InsertOrUpdate | |||
* Save | |||
* SaveChanges | |||
このため使用したい製品に関するUPSERT命令は「upsert 〇〇」などと[[ググって]]調べるのが得策である。 | |||