mysql:在现有表中导入csv

时间:2013-06-15 18:05:45

标签: mysql csv phpmyadmin multiple-columns

想象一下,您有一个CSV文件,其中只包含文字,行结尾为\r\n。 像这样:

abc
def
hij
...
xyz

您希望在现有的多列表中导入此文件,其中每行文本需要放在表的一个特定(当前为空)列(将其命名为needed)的行中。像这样:

| a | b | c |needed|
|foo|bar|baz|______|< - abc
|foo|bar|baz|______|< - def
...
|foo|bar|baz|______|< - xyz

CSV文件中的数据不需要按特定顺序插入。 needed哪个字段包含CSV中的哪些数据并不重要,只要每行都导入,一切都很好。

我已经尝试了很多东西,它让我很生气,但我无法弄清楚,如何做到这一点。可以通过LOAD DATA INFILE和update / replace / insert命令以某种方式解决这个问题吗?在这样的情况下你会做什么?甚至可以用mysql吗?或者我需要一个自定义的PHP脚本吗?

我希望这个问题足够明确。如果您不清楚,请询问。

2 个答案:

答案 0 :(得分:1)

好的,你走了......

向填充了1-600,000

stuff添加新列
ALTER TABLE stuff ADD COLUMN newId INTEGER UNIQUE AUTO_INCREMENT;

为CSV文件创建临时表

CREATE TABLE temp (
    id INTEGER PRIMARY KEY AUTO_INCREMENT,
    data VARCHAR(32)
);

我猜测所需的数据长度。

导入临时表

LOAD DATA INFILE <wherever> INTO TABLE temp;

将数据添加到stuff

UPDATE stuff AS s
JOIN temp AS t ON t.id=s.newId
SET s.needed=t.data;

整理

DROP TABLE temp;
ALTER TABLE stuff DROP COLUMN newId;

我必须承认我没有测试LOAD DATA INFILEUPDATE语句,但我检查了所有表格。特别是,MySQL将使用连续数字填充newId列。

如果stuff中的行数与csv文件中的行数不匹配,我认为不会出现问题 - 很明显,会有几行{{1}如果行数少于行,则仍为NULL。

答案 1 :(得分:0)

我找到的最简单的方法是使用Libreoffice Calc + Base。 Import/Export Data in Base.

但是,如果你在列中有“not null”选项,并且错误地存在一个没有数据的单元格,那么该行将被删除。

首先从列中禁用not null选项。

哦,有Microsoft Office Excel的方式,但我没有这样做,因为它需要一个插件来安装,我很懒。