需要LOAD DATA LOCAL INFILE帮助

时间:2012-06-01 22:00:28

标签: mysql sql import

这是我使用csv文件加载mysql表的查询。

LOAD DATA LOCAL INFILE table.csv REPLACE INTO TABLE table1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\'' LINES TERMINATED BY 'XXX' IGNORE 1 LINES 

SET date_modified = CURRENT_TIMESTAMP;

假设我的CSV包含500条包含15列的记录。我更改了三行并用'XXX'终止了它们。我现在想用这个文件更新mysql表。我的主键是自动递增的值。当我运行此查询时,所有500行都会使用旧数据进行更新,而我更改的行将被添加为新行。我不想要新的。我希望我的表可以用csv替换。我尝试将我的主键更改为非AI,它仍然无法正常工作。有什么指针吗?感谢。

1 个答案:

答案 0 :(得分:0)

我在这里做了一些假设。

1)您的文件中没有自动编号值。

由于您的主键不在您的文件中,因此MySQL将无法匹配行。自动编号主键是人工密钥,因此它不是数据的一部分。当插入行时,MySQL会添加这个人工主键。

让我们假设您的文件包含一些唯一标识符,我们称之为Identification_Number。这个数字都在文件中,你的表使用它作为主键,在这种情况下,MySQL将能够识别文件中的行并将它们与表中的行相匹配。

虽然很多人只会在数据库中使用自动编号,但我总是会检查数据中是否存在自然键。如果我确定了一个,我会在表格中使用这个自然键进行一些性能测试。然后根据两者的性能指标,我决定一个密钥。

希望我没有把你的问题弄错,但我怀疑情况可能如此。