「UPSERT」の版間の差分
ナビゲーションに移動
検索に移動
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) |
||
1行目: | 1行目: | ||
− | '''UPSERT'''(読み:あっぷさーと)とは、[[SQL]] | + | '''UPSERT'''(読み:あっぷさーと)とは、[[SQL]]において「レコードがあればUPDATE、なければINSERT」という一連の処理のこと指すUPDATEとINSERTを超合金合体させた造語である。 |
== 概要 == | == 概要 == | ||
10行目: | 10行目: | ||
# トランザクション終了 | # トランザクション終了 | ||
− | |||
ここ最近のデータベースサーバーでは[[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 〇〇」などと[[ググって]]調べるのが得策である。 | |
− | |||
− | |||
− |
2020年5月15日 (金) 00:56時点における版
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 〇〇」などとググって調べるのが得策である。