import tab将带有部分数据的csv文件与phpMyAdmin分离到mysql表中

时间:2014-10-18 12:29:19

标签: mysql csv phpmyadmin

我有一个MySQL表,大约有30列。 我有一个CSV文件,大约有10列。

我想使用phpMyAdmin更新数据库中CSV文件的数据而不更改其余数据。

例如,MySQL将是:

id, code,  name,     description, a,   b,   c,   x,  y,   z
10, rbmls, Joe Blow, Neighbor,    100, 200, 500, 80, 800, 10

CSV可以包含:

id[TAB]code [TAB]a [TAB]b  [TAB]c
10[TAB]rbmls[TAB]10[TAB]300[TAB]0

我希望通过ID匹配CSV和MySQL表中的数据,然后在不删除任何其他内容的情况下覆盖MySQL表中CSV的数据。

上述示例的期望结果是:

id, code, name, description, a, b, c, x, y, z
10, rbmls, Joe Blow, Neighbor, 10, 300, 0, 80, 800, 10

我如何在phpMyAdmin中执行此操作?

1 个答案:

答案 0 :(得分:1)

LOAD DATA INFILE最后有一个列规范。 see here

LOAD DATA INFILE ... 
INTO TABLE ... 
FIELDS TERMINATED BY '\t'
IGNORE 1 LINES
(id, code, a, b, c)

来自MySQL-Doc:

  

默认情况下,如果在LOAD DATA INFILE语句末尾没有提供列列表,则输入行应包含每个表列的字段。如果只想加载某些表的列,请指定列列表:   LOAD DATA INFILE'persondata.txt'INTO TABLE persondata(col1,col2,...);

<强>替代

将数据加载到临时表中,然后从那里到主表执行INSERT ... UPDATE。这样的事情:

LOAD DATA INFILE ... INTO TABLE `temp` ...

INSERT INTO mainTable (id, code, a, b, c)
SELECT * FROM `temp`
  ON DUPLICATE KEY UPDATE code=VALUES(code), a=VALUES(a), b=VALUES(b), c=VALUES(c);

请参阅here