問題タブ [upsert]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sqlite - 他の更新が存在しない場合は挿入しますか?
古典的な「新しいレコードを挿入する方法、または既存のレコードを更新する方法」の解決策をいくつか見つけましたが、SQLiteでそれらを機能させることができません。
次のように定義されたテーブルがあります。
私がやりたいのは、一意の名前のレコードを追加することです。名前がすでに存在する場合は、フィールドを変更したいと思います。
誰かがこれを行う方法を教えてもらえますか?
java - Hibernate を使用して upsert の動作を模倣する方法は?
サードパーティのデータソースからのエンティティを独自のスキーマに同期するアプリケーションを作成しており、その間に変換/マッピングのステップがあります。Hibernate を使用して、独自のスキーマでエンティティを表現および永続化しています。私が直面している問題は、テーブルの 1 つに一意の複数列キーがあることです。私が見たい動作は upsert に似ています: Hibernate がエンティティを永続化し、一意の制約違反を検出すると、代わりに更新を行います。INSERT ... ON DUPLICATE KEY UPDATE 構文を提供する MySQL を使用していますが、Hibernate でそれを使用できるかどうか、またはどのように使用できるかわかりません。
いつでも挿入を試すことができ、例外をキャッチした場合は更新を行うことができると思いますが、それはハックで最適ではないようです。これを行うためのクリーンな方法に関するヒントはありますか?
mysql - MySql アップサートと自動インクリメントがギャップを引き起こす
自動インクリメントの主キーを持つ MySql テーブルを持っていますが、さまざまな upsert メソッド (INSERT IGNORE および ON DUPLICATE KEY UPDATE) のすべてが、自動インクリメント フィールドがインクリメントするという機能に悩まされているようです。行が更新され、挿入されていない場合。これは、テーブルにギャップが生じることを意味しますが、これは望ましくないと思います。
したがって、問題は次のとおりです。自動インクリメント フィールドを持つテーブル内のレコードを、そのフィールドを自動インクリメントせずにアップサートする方法はありますか? 私の考えでは、これが upsert の動作方法ですが、そうではないようです。
jpa - JPAのUPSERTにはLockModeType.PESSIMISTIC_WRITEで十分ですか?
JPA concurrency に関するこの記事を読みましたが、厚すぎるか、十分に明示的ではありません。
データベース制御のアトミック update-if-found-else-insert 操作 (an UPSERT
) を実行しようとしています。
私の貧弱な頭脳には、もちろんトランザクション内で、 のロックモードで名前付きクエリを実行し、結果PESSIMISTIC_WRITE
が返されるかどうかを確認してから、persist()
またはその後のいずれかを実行できるように見えますupdate()
。
私がはっきりしていないのは、この操作をPESSIMISTIC_WRITE
ロックとロックで行うことの違いPESSIMISTIC_READ
です。私は文を読みました--それPESSIMISTIC_READ
は反復不可能な読み取りを防ぐことを意図していることを理解しています、そしてPESSIMISTIC_WRITE
...まあ、多分私はそれをあまりよく理解していません:-) --しかし、その下には単なる SQLSELECT FOR UPDATE
です、ええ? 両方の場合において?
sql - この特定の構文がupsertingで機能しないのはなぜですか?
SQL Server 2005を使用していて、同じ定義を持つが異なるデータベースに存在する2つのテーブルを同期したいと思います。MERGE INTOは2008年にのみ存在し、UPDATEで列を指定する必要がない構文を使用したいと思います。そこで、次の構文を使用してさまざまな投稿に遭遇しました。
しかし、それを実行しようとすると、次のようになります。
どうすればこれを機能させることができますか?同期する必要のある複数のテーブルがあり、すべてのステートメントですべての列を指定したくありません。
ヒントをありがとう!
sql-server-2008 - より多くのデータがある場合、Upsertはより効果的になりますか?
ある量のデータを削除して、同じテーブルに挿入する必要があります。
Upsertをループで使用すると、パフォーマンスが向上しますか?
c# - 最初に行が存在するかどうかを確認し、それに応じて更新または挿入するコードを記述する最良の方法は何ですか?
私は、データベースの永続性をコーディングするより現代的な方法にかなり慣れていません。私の直感は、コードが「洗練されていない」ように見えるため、何かが欠けている可能性があることを教えてくれますが、それを行う別の方法がわかりません。
注: おそらく Linq to SQL は「死んでいる」と見なされることを理解しています。私はおそらくこれをエンティティフレームワークに適用したり、後で休止状態にしたりできると仮定して、「概念を学ぶ」モードになっています。
バックグラウンド
あるデータベースからレコードを取得し、別のデータベースに入れています。取得された各レコードには、次の 2 つのケースがあります。
- 真新しい記録です。
- 値が更新されたのは、以前に挿入されたレコードです。
「古いコード」でこれを行う方法
行の存在をチェックし、それに応じて挿入と更新の両方のケースを処理する UpsertRecord というストアド プロシージャを作成します。これは入力するのが面倒で、より現代的なアプローチを検討し始めた理由の 1 つでもありました。
これまでに Linq to SQL を使用してきたこと:
質問: 驚いたことに、すべてを 2 回入力しなければなりません。これが実際に必要な場合は、より経験豊富な人を驚かせることはないと確信しており、その点について確認していただければ幸いです。それ以外の場合は、同じ機能を取得する簡単な方法があります ( Salesforce の Upsert とも呼ばれます) 。 .
postgresql - Postgres: まだ存在しない場合は INSERT
Python を使用して postgres データベースに書き込みます。
しかし、いくつかの行が同一であるため、次のエラーが発生します。
「この行が既に存在しない限り INSERT」SQL ステートメントを作成するにはどうすればよいですか?
次のような複雑なステートメントが推奨されているのを見てきました。
しかし、第一に、これは私が必要とするものに対してやり過ぎであり、第二に、それらの 1 つを単純な文字列として実行するにはどうすればよいでしょうか?
mysql - MySQL テーブルに挿入するか、存在する場合は更新します
データベースのテーブルに行を追加したいのですが、同じ一意キーを持つ行が存在する場合、その行を更新したいと考えています。
例えば:
一意のキーがID
で、データベースに の行があるとしID = 1
ます。その場合、その行をこれらの値で更新したいと思います。通常、これはエラーになります。
使用INSERT IGNORE
するとエラーは無視されますが、それでも更新されません。
c# - Dynamics CRM 4 でアップサート (更新または挿入) 操作を行うクリーンな方法
現在、次のコードを使用して CRM で「アップサート」を実行しています。
この種の更新により、既存の情報がすべて私のビジネス エンティティから消去されると想定するのは正しいですか? もしそうなら、エンティティをリポジトリから更新するにはどうすればよいですか? fetch
、 、またはそのようなものが必要retrieve
ですか?
ありがとう。