1. ホーム
  2. php

[解決済み] MySQL - 無視挿入エラー: 重複エントリ

2023-07-22 20:52:34

質問

私はPHPで仕事をしています。

ユニークフィールドを持つDBに新しいレコードを挿入する適切な方法は何ですか? 私はバッチで多くのレコードを挿入しており、私は新しいものが挿入されるだけで、重複したエントリのためのエラーは欲しくありません。

最初にSELECTを作成し、INSERTの前にエントリがすでにそこにあるかどうかを確認する唯一の方法があります - そしてSELECTがレコードを返さない場合にのみINSERTするために?そうでないことを望みます。

私は、エラーなしでこれらの挿入を無視するように、どうにかしてMySQLに伝えたいと思います。

ありがとうございます。

どのように解決するのですか?

あなたは を挿入する... 無視する 構文は、重複するレコードがあるときに何もしないことを望む場合に使用します。

を使用することができます。 REPLACE INTO 構文を使用すると、同じキーを持つ新しいレコードで古いレコードを上書きすることができます。

あるいは INSERT... を重複したキーの更新時に 構文を使って、重複が発生したときに代わりにレコードの更新を実行することもできます。

編集:いくつかの例を追加しようと思いました。

という名前のテーブルがあるとします。 tbl という名前のテーブルがあり、2つのカラムがあるとします。 idvalue . id=1、value=1というエントリーが1つあります。 以下のようなステートメントを実行すると

REPLACE INTO tbl VALUES(1,50);

id=1 value=50のレコードが1つ残っています。 しかし、レコード全体が最初に削除され、その後、再挿入されたことに注意してください。 次に

INSERT IGNORE INTO tbl VALUES (1,10);

操作は正常に実行されますが、何も挿入されません。 id=1 と value=50 が残っています。 最後に

INSERT INTO tbl VALUES (1,200) ON DUPLICATE KEY UPDATE value=200;

これで、id=1、value=200のレコードが1つできました。