私はPHPで働いています。
一意のフィールドを持つDBに新しいレコードを挿入する適切な方法を教えてください。バッチで大量のレコードを挿入していますが、新しいレコードを挿入したいだけで、重複したエントリのエラーは必要ありません。
最初にSELECTを作成し、INSERTの前にエントリがすでに存在するかどうかを確認し、SELECTがレコードを返さない場合にのみ挿入する方法はありますか?しないことを願っています。
エラーなしでこれらの挿入を無視するようにMySQLに何らかの形で伝えたいと思います。
ありがとうございました
重複するレコードがある場合にアクションを実行しない場合は、 INSERT ... IGNORE 構文を使用できます。
古いレコードを同じキーを持つ新しいレコードで上書きする場合は、 REPLACE INTO 構文を使用できます。
または、重複が発生したときにレコードの更新を実行する場合は、 INSERT ... ON DUPLICATE KEY UPDATE 構文を使用できます。
編集:いくつかの例を追加すると思いました。
tbl
とid
の2つの列を持つvalue
という名前のテーブルがあるとします。 1つのエントリ、id = 1およびvalue = 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の単一のレコードができました。