如何使用LOAD DATA INFILE将CSV文件中的选定列插入MySQL数据库

Uge*_*ali 73 mysql csv

我有一个包含10列的CSV文件.我想只从该文件中选择一些列,并使用该LOAD DATA INFILE命令将它们加载到MySQL数据库中.

ArK*_*ArK 105

将数据加载到MySQL中的表中并指定列:

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE t1 
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'  
(@col1,@col2,@col3,@col4) set name=@col4,id=@col2 ;
Run Code Online (Sandbox Code Playgroud)

@ col1,2,3,4是保存csv文件列的变量(假设4)name,id是表列.

  • 如果我有100列并且我只想导入2列,那么我应该写(@ col1,@ col2,... @ col100)set name = @ col4,id- @ col2; 还是有一个简单的方法? (7认同)
  • 我在 mysql 中运行您的答案并出现错误:`ERROR 1148 (42000): The used command is not allowed with this MySQL version`。 (2认同)
  • 注意:添加“IGNORE 1 LINES”以忽略标题 (2认同)

Mar*_*c B 39

LOAD DATA INFILE 'file.csv'
  INTO TABLE t1
  (column1, @dummy, column2, @dummy, column3, ...)
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\r\n';
Run Code Online (Sandbox Code Playgroud)

只需将column1,column2等替换为您的列名,然后将@dummy放在CSV中您要忽略的列中.

详情请点击此处.

  • 当我运行类似的东西时,我收到语法错误.我必须把`(字段,名字)`放在分号的最后才能使它工作. (5认同)
  • F是如何+38票?这是错误的SQL语法. (2认同)

Ata*_*sef 27

在load data infile语句中指定CSV中的列名称.

代码是这样的:

LOAD DATA INFILE '/path/filename.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
(column_name3, column_name5);
Run Code Online (Sandbox Code Playgroud)

在这里,您只需将数据添加到表中的两列(您可以使用列的名称选择它们).

您唯一需要注意的是,您有一个CSV文件(filename.csv),每行(行)有两个值.否则请提.我有一个不同的解决方案.

谢谢.

  • 可能其他答案有点过时了.这个适用于MySQL 5.6 (2认同)
  • 不幸的是,这并没有回答这个问题。这要求 .csv 中有两列,并将它们插入到数据库中的两个特定列中。发帖者请求从 10 个 csv 中提取 2 列。 (2认同)

Rob*_*óes 9

例:

ae.csv文件的内容:

"Date, xpto 14"
"code","number","year","C"
"blab","15885","2016","Y"
"aeea","15883","1982","E"
"xpto","15884","1986","B"
"jrgg","15885","1400","A"
Run Code Online (Sandbox Code Playgroud)

CREATE TABLE Tabletmp (  
    rec VARCHAR(9) 
);
Run Code Online (Sandbox Code Playgroud)

仅适用于第3栏:

LOAD DATA INFILE '/local/ae.csv' 
INTO TABLE Tabletmp
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 2 LINES
(@col1, @col2, @col3, @col4, @col5)
set rec = @col3;


select * from Tabletmp;
    2016
    1982
    1986
    1400
Run Code Online (Sandbox Code Playgroud)