我有一个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中做到这一点?
LOAD DATA INFILE
在末尾有一个列规范。参见此处
LOAD DATA INFILE ...
INTO TABLE ...
FIELDS TERMINATED BY 't'
IGNORE 1 LINES
(id, code, a, b, c)
来自MySQL文档:
默认情况下,当LOAD DATA INFOILE语句末尾没有提供列列表时,输入行应包含每个表列的一个字段。如果只想加载表的某些列,请指定列列表:将数据信息'persondata.txt'加载到表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);
请参阅此处