小编典典

导入CSV以仅更新表中的一列

mysql

我有一个看起来像这样的表:

products
--------
id, product, sku, department, quantity

该表中大约有800,000个条目。我收到了一个新的CSV文件,该文件更新了每种产品的所有数量,例如:

productA, 12
productB, 71
productC, 92

因此,大约有750,000个更新(50,000个产品的数量没有变化)。

我的问题是,如何导入CSV这个只更新的基于关闭的数量product(唯一的),但离开了skudepartment独自一人,和其他领域?我知道如何在PHP中通过遍历CSV并为每一行执行更新来做到这一点,但这似乎效率很低。


阅读 375

收藏
2020-05-17

共1个答案

小编典典

您可以用来LOAD DATA INFILE将800,000行数据批量加载到临时表中,然后使用多表UPDATE语法将现有表连接到临时表并更新数量值。

例如:

CREATE TEMPORARY TABLE your_temp_table LIKE your_table;

LOAD DATA INFILE '/tmp/your_file.csv'
INTO TABLE your_temp_table
FIELDS TERMINATED BY ','
(id, product, sku, department, quantity);

UPDATE your_table
INNER JOIN your_temp_table on your_temp_table.id = your_table.id
SET your_table.quantity = your_temp_table.quantity;

DROP TEMPORARY TABLE your_temp_table;
2020-05-17