使用LOAD DATA INFILE导入MySQL表时如何跳过CSV文件中的列?

时间:2010-01-26 11:36:46

标签: mysql csv load-data-infile

我有一个包含11列的CSV文件,我有一个包含9列的MySQL表。

CSV文件如下所示:

col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11

和MySQL表看起来像:

col1, col2, col3, col4, col5, col6, col7, col8, col9

我需要将CSV文件的第1-8列直接映射到MySQL表的前8列。然后,我需要跳过CSV文件中的下两列,然后将CSV文件的第11列映射到MySQL表的第9列。

目前我正在使用以下SQL命令:

LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\n'

但是上面的代码将CSV文件的前9列映射到MySQL表中的9列。

4 个答案:

答案 0 :(得分:80)

From Mysql docs:

  

您也可以通过丢弃输入值   将其分配给用户变量和   不将变量赋值给表   柱:

LOAD DATA INFILE 'file.txt'  
INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);

答案 1 :(得分:4)

step1.deal with awk。

cat file.txt |awk '{print $1,$2,$5...}'>new_file.txt

step2.load into mysql。

load data local infile 'new_file' into table t1(...)

下面的方法很简单,但在较低版本的mysql中不允许使用。

LOAD DATA INFILE 'file.txt'  
INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);

答案 2 :(得分:0)

@ deemi

忽略@dummy的唯一方法是将字段的默认值设置为AUTO INCREMENT。 所以你可以跳过这个字段,只需这样编码,

LOAD DATA INFILE 'file.txt'  
INTO TABLE t1 (column2, column3, column4, column5);

//假设默认情况下字段名column1设置为AUTO INCREMENT

答案 3 :(得分:0)

我认为代码还有一处变化:

以下SQL命令:

LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\n'

- 可能会导致数据截断错误。

因此,最好使用LINES TERMINATED BY '\r\n'代替LINES TERMINATED BY '\n'

所以代码将是:

LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\r\n'