一般的なデータベースのバッチ挿入、重複データを挿入しないようにするにはどうすればよいですか? Mysql のデータ挿入の繰り返しを回避する 4 つの方法!

最も一般的な方法は、フィールドに主キーや一意のインデックスを設定する方法ですが、重複データを挿入するとエラーが発生してプログラムが終了しますが、その後の処理に支障をきたすため、insert文に特別な処理が必要です、それを避けるか無視しようとします。異常です。簡単に紹介します。興味のある友達は試してみてください。

ここでは、デモンストレーションの便宜上、主に id、ユーザー名、性別、アドレスの 4 つのフィールドを持つ新しいユーザー テスト テーブルを作成しました。主キーは id (自己インクリメント) で、一意のインデックスが設定されています。ユーザー名フィールド:

データの挿入時に、データの重複などのエラーがあった場合、エラーは返されず、警告のみが返されます。したがって、ステートメント自体に問題がないことを確認するには、ignore を使用します。問題がない場合、ステートメントは無視されます。例えば:

INSERT IGNORE INTO user (field) VALUES ('xxx')

無視には他の副作用があることに注意してください。無視の具体的な意味を確認してください。

 

2、合鍵更新について

プライマリまたはユニークが繰り返される場合、update ステートメントが実行されます。update の後に id=id などの無駄なステートメントが続く場合、1 と同じ機能ですが、エラーは無視されません。

たとえば、エラーを報告せずに重複した名前のデータを挿入するには、次のステートメントを使用できます。

INSERT INTO user (field) VALUES ('xxx') ON duplicate KEY UPDATE id = id

この方法には前提条件があります。つまり、挿入する必要がある制約は主キーまたは一意制約である必要があります (ビジネスにおいて、それを唯一の判断として使用したい場合は、そのフィールドを一意制約として設定します)。つまり、一意のキーです)。

3、存在しない箇所に挿入 … 選択 …

selectの条件で挿入するかどうかの判断は、プライマリとユニークだけでなく、他の条件でも判断できます。例えば:

INSERT INTO user (field) SELECT 'xxx' FROM dual WHERE NOT EXISTS (SELECT id FROM user WHERE id = 1)

この方法は実際にはmysqlのテンポラリテーブルを使用するのですが、サブクエリを使用しているため効率が少し悪くなるので、上記が使える方は使用しないでください。

4、に置き換えます

同じプライマリまたは一意のレコードがある場合は、最初にそれを削除します。次に、新しいレコードを挿入します。

REPLACE INTO user SELECT 1, 'telami' FROM books

同じレコードがあってもなくても削除してから挿入する方法です。

 

おすすめ

転載: blog.csdn.net/zlfjavahome/article/details/132208752