「重複キー更新時」の使用時に行が挿入されたか更新されたかを知るにはどうすればよいでしょうか? 質問する

「重複キー更新時」の使用時に行が挿入されたか更新されたかを知るにはどうすればよいでしょうか? 質問する

私たちは、cronjob を使用して毎日深夜に更新されるデータベースを持っており、外部 XML から新しいデータを取得します。

私たちが行うことは、すべての新しいコンテンツを挿入し、重複したキーがある場合はそのフィールドを更新することです。

INSERT INTO table (id, col1, col2, col3)
values (id_value, val1, val2, val3),
(id_value, val1, val2, val3),
(id_value, val1, val2, val3),
(id_value, val1, val2, val3),
ON DUPLICATE KEY UPDATE 
col1 = VALUES (col1), 
col2 = VALUES (col2), 
col3 = VALUES (col3);

私たちが知りたいのは、実際に挿入された行です。つまり、新しい項目のリストを取得したいのです。新しい挿入を返すクエリはありますか? 基本的に、新しい挿入の数ではなく、すべての新しい ID を取得する必要があります。

ありがとう

ベストアンサー1

挿入/更新時に結果セット内の影響を受ける行の数を調べることで、この情報を取得できます。

マイグレーションドキュメンテーション状態:

ON DUPLICATE KEY UPDATE では、行が新しい行として挿入される場合は行ごとの影響行の値は 1 になり、既存の行が更新される場合は 2 になります。

答えを得て一度に 1 行ずつ挿入するには、ROW_COUNT と LAST_INSERT_ID を組み合わせる必要があります。

おすすめ記事