4

現在、mySQL LOAD DATA INFILE を使用して csv ファイルをデータベースに挿入しています。この csv ファイルは、製品データを最新の状態に保つために、毎日サーバーにダウンロードされます。

私が知りたいのは、テーブルを新しい csv で更新し、既存のデータを変わらない場所に保存するにはどうすればよいかということです。

これが私の現在の声明です:

LOAD DATA LOCAL INFILE '$file' REPLACE INTO TABLE products FIELDS TERMINATED BY ',' ENCLOSED BY '\"' ESCAPED BY '\\\' IGNORE 1 LINES (aw_product_id,merchant_id,merchant_image_url,aw_deep_link,description,in_stock,merchant_name,brand_name,display_price,product_name,rrp_price,merchant_category

これは正常に機能しますが、ID 列を完全に新しいセットに置き換え、無視したい列をデフォルトの状態に戻します。たとえば、値が 0 または 1 の「Published」という列があります。REPLACE を使用すると、その列が 0 に戻ります。

REPLACE を使用して一部の列を無視するにはどうすればよいですか?

4

2 に答える 2

6

REPLACE を使用して一部の列を無視するにはどうすればよいですか?への回答 できないこと:その行の単一のフィールド値ではREPLACEなく、常に完全な行を置き換えます。

それでも私の目標を達成できますか? への答えははいです: 私の推奨は、別のテーブルに移動してから、メイン テーブルLOAD DATA LOCAL INFILEに対してストアド プロシージャまたはクエリを使用することです (INSERTUPDATEは対照的に)。REPLACEもう少し情報 (テーブル構造、ロードされたデータと既存のデータが一致する列) を提供していただければ、さらにサポートできる可能性があります。

于 2012-09-08T10:05:12.810 に答える