私のアプリケーションは重複した主キー データを挿入する可能性があります。最も効率的な方法は何でしょうか。挿入する前にキーが既に存在するかどうかを確認するか、それとも単に挿入して銀行にエラーを返してから処理させるのが最も効率的でしょうか?どちらが影響が少ないでしょうか? ありがとう###
最も効率的な方法は、ON DUPLICATE KEY UPDATE 句を指定した INSERT クエリを使用することです。
ON DUPLICATE KEY UPDATE
INSERT
主キーが存在しない場合は、新しいレコードが挿入されます。主キーがすでに存在する場合は、主キー レコードの指定されたフィールドのみが更新されます (エラーはスローされません)。
たとえば、user_id が存在しない場合、次のコードは新しいユーザーを作成します。 user_id が存在する場合にのみ、last_visited_date が更新されます。
user_id
last_visited_date
このアプローチにより、1 つのクエリで新しいレコードの作成と既存のレコードの更新が可能になり、既存の主キーを確認する必要がなくなります。
注: 主キーが自動インクリメントインデックスの場合、MySQL は ON DUPLICATE UPDATE 句を INSERT クエリと同じように扱うため、次の ID がインクリメントされます。 by 1 主キーがすでに存在している限り。
ON DUPLICATE UPDATE
ON DUPLICATE KEY UPDATE 句を使用したくない場合は、既存の主キーのエラーを捕捉することが最もパフォーマンスの高いアプローチになります。
最も効率的な方法は、
ON DUPLICATE KEY UPDATE
句を指定したINSERT
クエリを使用することです。主キーが存在しない場合は、新しいレコードが挿入されます。主キーがすでに存在する場合は、主キー レコードの指定されたフィールドのみが更新されます (エラーはスローされません)。
たとえば、
リーリーuser_id
が存在しない場合、次のコードは新しいユーザーを作成します。user_id
が存在する場合にのみ、last_visited_date
が更新されます。このアプローチにより、1 つのクエリで新しいレコードの作成と既存のレコードの更新が可能になり、既存の主キーを確認する必要がなくなります。
注: 主キーが自動インクリメントインデックスの場合、MySQL は
ON DUPLICATE UPDATE
句をINSERT
クエリと同じように扱うため、次の ID がインクリメントされます。 by 1 主キーがすでに存在している限り。ON DUPLICATE KEY UPDATE
句を使用したくない場合は、既存の主キーのエラーを捕捉することが最もパフォーマンスの高いアプローチになります。