导入(半)大型CSV和重复数据

时间:2012-02-21 20:35:39

标签: mysql import

我正在使用MySQL的LOAD DATA INFILE每晚在cronjob上导入大约150k行的CSV。

表定义很简单(CSV包含除ID以外的所有列):

CREATE TABLE products (
    id int(10) unsigned auto_increment
    category varchar(30) NOT NULL,
    subtype varchar(30) NOT NULL,
    manufacturer varchar(50) NOT NULL,
    part varchar(100) NOT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY mfg_part (manufacturer,part)
);

问题:
我不知道如何处理删除不再包含在CSV中的记录。

我的尝试:
我的想法是在表中添加一个批号,并使LOAD DATA INFILE用最新的批号更新每个现有记录。然后删除查询将删除批号不是最新的所有记录。用于此的加载数据查询是:

LOAD DATA INFILE '/path/to/products.csv'
REPLACE INTO TABLE `products`
FIELDS TERMINATED BY ','
ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
(`category`, `subtype`, `manufacturer`, `part`)
SET `batch` = $newBatchNumber

不起作用,因为SET batch导致MySQL将每一行视为一个完整的新记录,而不是将旧的批号更新为新的。

有解决方法吗?

就目前而言,我能想到的唯一另一种选择是从LOAD DATA INFILE切换到批量的INSERT ... ON DUPLICATE KEY UPDATE查询。

0 个答案:

没有答案