問題タブ [on-duplicate-key]
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.
mysql - ON DUPLICATE KEYクエリの重複はどこにありますか?
説明:
ユーザーの設定をデータベースに挿入しようとしています。ユーザーがまだ配置していない場合は、 が必要です。insert
それ以外の場合は、 が必要ですupdate
。ユーザーの作成にデフォルト値を挿入して、を排他的に使用できることはわかっていますupdate
が、それにより別のクエリが追加されます(と思います)
問題:
読み進めましたON DUPLICATE KEY UPDATE
が、よくわかりません。これは私が持っているほぼ正確な質問ですが、答えはありません。答えは言う:
UNIQUE KEYまたはPRIMARY KEYとして定義された適切な列を持っている限り、あなたがやりたいことに対してうまくいくように聞こえます。
私がそのinsert
ように簡単にすると:
それは でどのように生成されDUPLICATE KEY
ますか? mysql
知る限り、それは単なる別の挿入であり、id
自動インクリメントされます。テーブルの主キーを一意に設定していますが、それinsert
に対してチェックするつもりはありませんよね?
テーブル:
sql - MS Access: ON DUPLICATE KEY UPDATE を達成する方法は?
キーの存在を確認し、それに応じて挿入または更新するために個別のクエリを回避しようとしています。グーグルで調べてみると、Access は SQL サーバーの MERGE もサポートしていないようです。
ありがとう
mysql - mysql で条件付きでユーザーのオブジェクト関係を別のユーザーにマージする
これは私の初めてのSOの質問です:)
一時ユーザーを既存のユーザーに「マージ」しようとしています。関連するすべてのオブジェクト関係 - 1 つは「post_relationships」です。
問題は..両方のユーザーが同じ投稿に関係がある場合、単純な INSERT INTO ... SELECT ステートメントで DUPLICATE KEY エラーが発生する..
また、ユーザーの1人がより高いpermission_levelを持っている場合、2人のユーザーの最高のpermission_levelを維持したいと思います。
機能するクエリを作成しましたが、これを達成するためのより良い方法があるかどうか疑問に思っています。テーブルが大きくなるにつれて、このクエリはそれほど効率的ではなくなるのではないかと心配しています。
条件が満たされた場合、常に UPDATE を強制します。
そして、ここにやり過ぎのコードがあるのではないかと心配しています。助言がありますか?
ありがとう!
mysql - 一意のマッピング キーの一部に ON DUPLICATE KEY UPDATE を使用する
以下に示すようなテーブルがあります
この表ItemAttMapID
には、auto_increment
primary_key
とItemAttributeID, VendorID, VItemID
ですUnique Mapping
。
次のクエリを使用しました
必要な適切な結果が得られますが、特定のレコードを更新する代わりに次のクエリを使用すると、新しいレコードが挿入されます。
テーブルの変更は次のようになります
3番目の番号行を更新したいのですが、テーブルに新しいレコードを挿入しています。
ON DUPLICATE KEY UPDATE を使用してこれを達成するにはどうすればよいですか。
編集:
ON DUPLICATE KEY UPDATE を使用してレコード ( NOT THE ) を更新VendorID
しvItemID
ます。ItemAttributeID
ItemAttributeID
同じものVendorID
をクエリに入れるとvItemID
、レコードが更新され、そうでない場合は新しいレコードが挿入されるためです。
mysql - 重複キーの更新時に更新
playerspoints
ショップIDとプレーヤーのID、およびプレーヤーのポイントを含むテーブルがあります。
私がやりたいのは、ショップからショップへのポイントの移動です。
- 問題:ショップIDとプレーヤーIDが一意のインデックスを形成します。
- 私がやりたいのは、重複キーの更新で、失敗させるのではなく、一方のエントリのポイントをもう一方のエントリに追加し、「from」エントリを削除することです。
何かのようなもの:
わかりますか?
php - 名前付きプレースホルダーを使用した INSERT および ON DUPLICATE KEY UPDATE の PDO 準備済みステートメント
PDO INSERT および UPDATE 準備済みステートメントを INSERT および ON DUPLICATE KEY UPDATE に切り替えたいのですが、現在行っていることよりもはるかに効率的であると思いますが、正しい構文を理解するのに苦労しています名前付きプレースホルダーおよび bindParam と共に使用します。
SO で同様の質問をいくつか見つけましたが、PDO は初めてで、コードを自分の基準にうまく適合させることができませんでした。これは私が試したものですが、機能しません (挿入も更新もされません):
これは私のコードの単純化されたバージョンです (いくつかのクエリがあり、各クエリには 20 ~ 50 のフィールドがあります)。現在、最初に更新し、更新された行数が 0 より大きいかどうかを確認し、そうでない場合は Insert を実行しています。これらのクエリにはそれぞれ独自の bindParam ステートメントのセットがあります。
mysql - MySQLが重複キーで競合するキーを返すようにするにはどうすればよいですか?内部を見る
たとえば、私は単純なテーブルを持っています:id
主キーとして、そしてfield
。それから私はします:そして
INSERT INTO table(id,field) VALUES (1,'blah')
私はそれをもう一度します。では、どうすればMySQLを次のように返すことができますか?
id
1
競合するキーをSELECTするように機能するようにするには?
mysql - 存在する場合は更新し、そうでない場合は挿入しますが、列が一意ではありません
ON DUPLICATE KEY UPDATE
行が存在する場合は行を更新する場合、または行が存在しない場合は挿入する場合に" " を使用できることを知っています。しかし、私の場合、一意でないキーに基づいて更新したいと考えています。
例: A、B、C の 3 つの列を持つテーブルがあります。それらすべてが一緒になって一意のキーを形成します。
B と C の値が一致する場合は行を更新するか、新しい行を挿入します。
これは、複数のクエリなしで MySQL で実行できますか。
mysql - 重複キーの更新で挿入と同じ
探し回ったのですが、可能かどうかわかりませんでした。
私はこのMySQLクエリを持っています:
フィールドIDには「一意のインデックス」があるため、2つにすることはできません。同じIDがデータベースにすでに存在する場合は、それを更新したいと思います。しかし、実際には、次のように、これらすべてのフィールドを再度指定する必要がありますか?
または:
私はすでに挿入物にすべてを指定しました...
補足として、回避策を使用してIDを取得したいと思います。
誰かが私に最も効率的な方法が何であるかを教えてくれることを願っています。
mysql - INSERT INTO...SELECT で ON DUPLICATE KEY を使用する方法
同じ構造のテーブルが 2 つあります。テーブル A には現在のすべての広告が含まれ、テーブル B にはアーカイブされた広告が含まれます。列 1 (ad_id) は主キー、AI、INT です。テーブル エンジンは MyISAM です。
特定の日付より前のすべてのテーブル A の広告をアーカイブのテーブル B にコピーする必要があります。私の目標は、ad_id を除くすべてのフィールドを複製し、ad_id を自動インクリメントすることです。これが私が試みたものです:
テーブル B には何千もの広告があり、テーブル A は頻繁にフラッシュされるため、一意の ID フィールドの数値が小さくなり、テーブル B の ID と重複することがよくありますDuplicate entry '8577' for key 'PRIMARY'
。
だから私はそれを乗り越えるためにいくつかの試みをしました:
最初に、挿入する個々の列を選択して、ad_id
NULLに設定しようとしました。
#1241 - Operand should contain 1 column(s)
ワイルドカード * セレクターを使用するとエラーが発生しますが、重複エラーが発生します。
次にSELECT LAST_INSERT_ID()
、常に 0 を返す を試しました。
次に、 を使用していくつか試してみましたON DUPLICATE KEY UPDATE
が、うまくいかないようです。
私は最高のIDを取得しようとしました:
これは正確に 1 行で機能しますが、再びエントリが重複します (@max は静的変数であるため)。
ここで何が間違っていますか?私はこの道を難しくしすぎていますか?