2012-06-01 375 views
0

这里是我使用csv文件加载mysql表的查询。LOAD DATA LOCAL INFILE需要帮助

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,但它仍然无效。请指点?谢谢。

+0

为什么不截断表格然后导入数据文件? – Ander2

+0

是的,这是一个选项,但用户需要这种方式。标记行更改很容易,而不是删除未更改的行。您的意思是,对吧? – user1165952

+0

我认为@Ander2的意思是你清除其所有内容的现有表,然后导入更改后的文件。 – SQLCurious

回答

0

我在这里做一些假设。

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

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

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

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

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

+0

我的文件和表都有自动递增的值。 – user1165952

+0

做文件和数据库中的值是否匹配? – Namphibian

+0

是的,主键值在文件和数据库中均匹配。 – user1165952