Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用LOAD DATA INFILE将CSV文件中的选定列插入MySQL数据库_Mysql_Csv - Fatal编程技术网

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

如何使用LOAD DATA INFILE将CSV文件中的选定列插入MySQL数据库,mysql,csv,Mysql,Csv,我有一个包含10列的CSV文件。我只想从该文件中选择一些列,并使用load DATA infle命令将它们加载到MySQL数据库中 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'; 只需更换

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

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';
只需更换第1列、第2列等。。使用列名,并将@dummy放在CSV中有一列要忽略的位置


完整详细信息。

将数据加载到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 ;

@col1、2、3、4是用于保存csv文件列(假设为4)名称的变量,id是表列。

在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);
LOAD DATA LOCAL INFILE 'pathOfFile.csv'
INTO TABLE youTable 
CHARACTER SET latin1 FIELDS TERMINATED BY ';' #you can use ',' if you have comma separated
OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\r\n'
(yourcolumn,yourcolumn2,yourcolumn3,yourcolumn4,...);
在这里,您只需要将数据添加到表中的两列(您可以使用列的名称选择它们)

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

谢谢。

示例:

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"

仅用于put第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

对于出现以下错误的用户:

错误代码:1290。MySQL服务器正在使用 --保护file priv选项,使其无法执行此语句

您只需运行此命令即可查看可以从哪个文件夹加载文件:

SHOW VARIABLES LIKE "secure_file_priv";

之后,您必须复制该文件夹中的文件,并使用
LOAD DATA LOCAL infle
而不是
LOAD DATA infle

运行查询。如果数据库表中的列数大于csv中的列数,则可以按以下方式进行:

LOAD DATA INFILE '/path/filename.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
(column_name3, column_name5);
LOAD DATA LOCAL INFILE 'pathOfFile.csv'
INTO TABLE youTable 
CHARACTER SET latin1 FIELDS TERMINATED BY ';' #you can use ',' if you have comma separated
OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\r\n'
(yourcolumn,yourcolumn2,yourcolumn3,yourcolumn4,...);

其他答案可能有点过时了。这一个在MySQL 5.6中对我有效,感谢您提供了文件的完整路径。有一段时间,我在搜索MySQL目录,我必须把csv文件放在其中!虽然路径必须来自允许的安全区域,但此路径效果最好。运行此命令显示变量,如“secure\u file\u priv”;然后将csv文件放到这个位置agree with@FabioNapodano。对于我的v5.7,我需要将列名放在语句的末尾。不幸的是,这不能回答问题。这要求.csv中有两列,并将它们插入数据库中的两个特定列中。海报要求从10的csv中提取2列。当我运行类似的操作时,我会得到一个语法错误。我必须把
(字段,名称)
放在结尾的分号之前才能使它起作用。除非你知道所有的csv列,否则这不会按比例缩放。这是多少F+38票?这是错误的SQL语法。我在mysql中运行了您的答案,出现了一个错误:
错误1148(42000):此mysql版本不允许使用所用的命令
@shgnInc refere这是怎么回事?如果我有100列,我只想导入2列,那么我应该写入(@col1,@col2,@col100)set name=@col4,id-@col2;还是有一个简单的方法?@Dharma是一个python 3程序,可以为范围(1100)中的i打印100个列名
:打印(“@column”,i,”,end=“”,sep=“”)
注意:添加“忽略1行”以忽略标题示例总是更好