我有一个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中执行此操作?
答案 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