如何使用LOAD DATA INFILE导入到MySQL表中时跳过CSV文件中的列?
我有一个有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列。
来自Mysql文档:
您还可以通过将input值分配给用户variables而不将该variables分配给表列来放弃input值:
 LOAD DATA INFILE 'file.txt' INTO TABLE t1 (column1, @dummy, column2, @dummy, column3); 
用awk step1.deal。
 cat file.txt |awk '{print $1,$2,$5...}'>new_file.txt 
step2.load到mysql。
 load data local infile 'new_file' into table t1(...) 
下面的方法很简单,但在低版本的mysql中不允许。
 LOAD DATA INFILE 'file.txt' INTO TABLE t1 (column1, @dummy, column2, @dummy, column3); 
@ deemi :
 忽略@dummy的唯一方法是将字段的Default设置为AUTO INCREMENT 。 所以你可以跳过这个领域,只是这样的代码, 
 LOAD DATA INFILE 'file.txt' INTO TABLE t1 (column2, column3, column4, column5); 
  //假定默认情况下fieldname column1被设置为AUTO INCREMENT 。 
我认为在代码中还有一个更改:
以下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'