1

PHP スクリプトでは、MySQLINSERT ... ON DUPLICATE KEY UPDATEコマンドを使用して、DB に多数のレコードを挿入/更新しています。どのレコードが挿入または更新されたかを示すために MySQL が返すものはありますか?

「醜い」方法は、各 INSERT の前に SELECT を実行し、各 INSERT の前にキーが存在するかどうかを確認することですが、MySQL にこの関数が組み込まれているかどうかを知りたいです。やるべきことは、レコード ID をログに保存することです。

4

2 に答える 2

2

SELECT具体的には、別のものが必要になりますSELECT ROW_COUNT()

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-countから

INSERT ... ON DUPLICATE KEY UPDATE ステートメントの場合、影響を受ける行の値は、行が新しい行として挿入される場合は 1、既存の行が更新される場合は 2 です。

于 2013-05-15T18:58:57.127 に答える
1

いいえ、どのレコードが挿入され、どのレコードが追加のクエリなしで MySQL によって提供される手段だけで更新されたかを知る方法はありません。ただし、レコードを挿入ではなく更新済みとしてマークするために使用できるインジケーターを保持できるテーブルに列を追加できます。

INSERT INTO YourTable (Col1, Col2, Updated)
VALUES ("value1", "value2", 0)
ON DUPLICATE KEY UPDATE
    Col1 = values(Col1),
    Col2 = values(Col2),
    Updated = 1
于 2013-05-15T19:02:04.730 に答える