問題タブ [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.

0 投票する
2 に答える
1466 参照

mysql - 1 つの SQL ステートメントで 2 つのデータベース テーブルをアップサートする方法は?

次に説明する 2 つのデータベース テーブルがあります。アスタリスクは主キーを強調しています。

テーブルurl_references内の対応するエントリの存在に基づいて投稿を挿入または更新したいと考えています。これに到達するための SQL コマンドの最適な組み合わせは何ですか? PHP挿入または更新に関する決定を処理することは避けたいと思います。 次のシナリオでは、PHP コマンドを使用した別の段階的な動作について説明します。

シナリオ 1: 新しいエントリを挿入します。

シナリオ 2: 既存のエントリを更新します。


編集 1:投稿のIDを直接確認できないことに注意してください。主キーとしてのURLに基づいて投稿を管理 (挿入/更新) したい。

0 投票する
2 に答える
3016 参照

sql - T-SQL で単純な挿入または更新を作成するにはどうすればよいですか?

何かが作成か更新かを追跡したくないプロセスがあります。追跡は複雑になります。作成または更新を実行したいと考えています。スキーマは次のようになります...

しようと考えています

何を指示してるんですか?


他の上位投票の回答を理解していることを確認したいと思います。私のスキーマを考えると、UPDATE は常に (INSERT を使用しても) 発生しますが、挿入は存在しない場所でのみ発生しますか?

0 投票する
3 に答える
948 参照

php - mysql_affected_rows(); 行が存在するかどうかのチェックには機能しません

私は mysql_affected_rows() を使用して、新しいレコードを入力する必要があるか、既存のレコードを更新する必要があるかを確認していますが、問題は、ユーザーが挿入を実行する既存のレコードとまったく同じデータを入力しようとした場合です。

冗長なエントリを回避するにはどうすればよいですか

0 投票する
1 に答える
9467 参照

sql - Postgresqlアップサートクエリ

重複の可能性:
挿入、重複更新時(postgresql)
postgresのUPDATERETURNING句から選択できません

構文エラーを理解するのに役立ちます。私はPosgreSqlでupsertクエリのそのような実装をしようとしています:

エラーは:

ただし、部分を挿入せずにサブクエリを更新するとうまく機能します。

アップサートクエリを作成する最も簡単な方法はありますか?

0 投票する
5 に答える
8426 参照

database - Postgresql-レコードが存在しない場合はレコードを挿入し、存在する場合は更新するクリーンな方法

これが私の状況です。たくさんのURLとそれらに関連付けられたクロール日を含むテーブルがあります。プログラムがURLを処理するときに、クロール日を含む新しい行を挿入したいと思います。URLがすでに存在する場合は、クロール日を現在の日時に更新したいと思います。MS SQLまたはOracleでは、おそらくこれにMERGEコマンドを使用します。mySQLでは、おそらくON DUPLICATEKEYUPDATE構文を使用します。

プログラムで複数のクエリを実行できますが、スレッドセーフである場合とそうでない場合があります。さまざまなIF...ELSEロジックを持つSQL関数を書くことができました。ただし、これまで使用したことのないPostgresの機能を試すために、INSERTルールを作成することを考えています。次のようなものです。

これは実際にはうまく機能しているようです。私のコードを初めて見る人はこのルールを魔法のように知っている必要があるため、「コードの可読性」の観点からはおそらくいくつかのポイントが失われますが、それは優れたコードコメントとドキュメントで解決できると思います。

このアイデアに他の欠点はありますか、または「あなたのアイデアはひどいです、代わりに/ this /の方法でそれを行うべきです」というコメントはありますか?それが重要な場合、私はPG9.0を使用しています。

更新:誰かがそれを望んでいたので、クエリプラン:)

0 投票する
1 に答える
7890 参照

python - Pythonを使用してpostgresで挿入または選択された行IDを取得する方法

私のpostgresクエリは次のとおりです。

新しく挿入されたステータス値IDが存在しない場合は取得するか、すでに存在する場合はそのIDを選択する必要があります。RETURNING idこのクエリを完全にチョークしたので、少なくとも選択的挿入を機能させるためにそれを削除する必要がありました。

ここでstatusIdを取得する方法の手がかりはありますか?別の例では、アップサートを実行しています(存在しない場合は挿入、そうでない場合は更新)ここでも、挿入または更新された行IDが必要です。(いいえ、それがあなたの最初の質問だった場合、私はストアドプロシージャを使用していません...)

前もって感謝します

0 投票する
1 に答える
611 参照

mongodb - mongoimport - $addToSet/$push with upsert?

アップサート中に既存の配列mongoimport追加するJSONを書くことは可能ですか? (モンゴッド 2.0)

0 投票する
2 に答える
2273 参照

sql-server - 複雑なTSQLマージ

私はこれを行う素晴らしいTSQLコードを「継承」しました。

  • カーソル上で行ごとにループします。
  • カーソルには、表Aでマージ(アップサート)する必要のあるデータが含まれています
  • カーソルの行ループごとに、ストアドプロシージャが呼び出されます。手順:
    • 対応する行がテーブルAに存在する場合、それは更新されます
    • そのような行が存在しない場合は、次のようにします。
      • 別のテーブルBに単一の行を挿入します。
      • 新しく生成されたIDをフェッチします(たとえば、IDBと呼ばれます)
      • テーブルAに単一の行を挿入します。テーブルAの挿入にはIDBが必要です(フィールドはnullではなく、テーブルBからの値のみを持つことになっていますが、FK制約はありません)

明らかにこれは最悪です(パフォーマンスとエレガンスの理由)!!

質問 最初は、これはMERGEの使用の標準的なケースのように見えます。私はやってみました:

また、のようなさまざまなアプローチを試しましたnested select that sends IDB on the OUTPUTが、IDBがPKであるため失敗します。

他の種類のマージも失敗しました。例:

誰かがこれについて考えを持っていますか?基本的に、質問を一般化すると、次のようになると思います。

Can I insert and return the PK in one statement that can be nested in other statements

返信をよろしくお願いします

ジョージ

0 投票する
1 に答える
1578 参照

c# - MongoDb Upsert デッドロック

MongoDb アップサート操作でデッドロックに達する可能性はありますか? 次のような upsert 操作で負荷テストを実行しています。

公式の mongodb C# ドライバーを使用して Azure マシンにデプロイされます。単一インスタンス、レプリカ セットまたはシャーディングはまだありません。

この同じ更新コマンドを 5000 回実行すると、200 の同時スレッド (2 台のマシン @ それぞれ 100 スレッド) に分割され、ほとんどの場合、デッドロックで終了します。つまり、コールの多くは決して戻ってきません。コンソール経由で db.currentOp() から確認できます。更新の多くはまだそこにあり、lockType:'write' で locked:true にスタックしています。

このデッドロックはなぜ起こるのでしょうか? それはどのように可能ですか?どうすればそれを防ぐことができますか?mongodb のデッドロックを回避するために、どのような操作を避けるべきかについての特定のガイドラインはありますか?

$atomic はソリューションに関連していますか? C# で $atomic:true を設定する方法もわかりませんが、おそらくこのデッドロックの問題とは関係ありません。