MYSQL使用LOAD DATA INFILE从csv导入数据

我从CSV文件导入一些20000行的数据到Mysql中。

CSV中的列与MySQL表中的列不同。 如何自动分配对应于MySQL表列的列?

当我执行

LOAD DATA INFILE'abc.csv' INTO TABLE abc 

此查询将所有数据添加到第一列。

请build议将数据导入到Mysql的自动语法。

您可以使用LOAD DATA INFILE命令将csv文件导入到表中。

检查这个链接MySQL – LOAD DATA INFILE

 LOAD DATA LOCAL INFILE 'abc.csv' INTO TABLE abc FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (col1, col2, col3, col4, col5...); 

您可能需要设置FIELDS TERMINATED BY ','或任何分隔符。

对于CSV文件,您的声明应该如下所示:

 LOAD DATA INFILE 'data.csv' INTO TABLE tbl_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES; 

在导入文件之前,您必须准备以下内容:

  • 一个数据库表,文件中的数据将被导入到该表中。
  • 数据与表格的列数和每列中的数据types相匹配的CSV文件。
  • 连接到MySQL数据库服务器的帐户具有FILE和INSERT权限。

假设我们有如下表格:

在这里输入图像描述

使用以下查询创build表格:

 CREATE TABLE IF NOT EXISTS `survey` ( `projectId` bigint(20) NOT NULL, `surveyId` bigint(20) NOT NULL, `views` bigint(20) NOT NULL, `dateTime` datetime NOT NULL ); 

必须正确格式化您的CSV文件,例如查看附加的图像:

在这里输入图像描述

如果每件事情都很好..请执行以下查询来从CSV文件加载数据:

注意:请添加您的CSV文件的绝对path

 LOAD DATA INFILE '/var/www/csv/data.csv' INTO TABLE survey FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES; 

如果一切都完成了。 您已成功将CSV数据导出到表格

句法:

 LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' INTO TABLE `tbl_name` CHARACTER SET [CHARACTER SET charset_name] FIELDS [{FIELDS | COLUMNS}[TERMINATED BY 'string']] [LINES[TERMINATED BY 'string']] [IGNORE number {LINES | ROWS}] 

看到这个例子:

 LOAD DATA LOCAL INFILE 'E:\\wamp\\tmp\\customer.csv' INTO TABLE `customer` CHARACTER SET 'utf8' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES; 

您可以从csv或文本文件加载数据。 如果您有一个包含表格logging的文本文件,则可以在表格中加载这些logging。 例如,如果您有一个文本文件,其中每行都是包含每列值的logging,则可以通过这种方式加载logging。

table.sql

 id //field 1 name //field2 

table.txt

 1,peter 2,daniel ... 

– 在Windows上的示例

 LOAD DATA LOCAL INFILE 'C:\\directory_example\\table.txt' INTO TABLE Table CHARACTER SET UTF8 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'; 

如果你正在从windows shell运行LOAD DATA LOCAL INFILE ,并且你需要使用OPTIONALLY ENCLOSED BY '"' ,你将不得不做一些这样的事情来正确地转义字符:

 "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql" -u root --password=%password% -e "LOAD DATA LOCAL INFILE '!file!' INTO TABLE !table! FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"^""' LINES TERMINATED BY '\n' IGNORE 1 LINES" --verbose --show-warnings > mysql_!fname!.out 

在1分钟内在数据库中插入大于7000000条logging(超快查询与计算)

 mysqli_query($cons, ' LOAD DATA LOCAL INFILE "'.$file.'" INTO TABLE tablename FIELDS TERMINATED by \',\' LINES TERMINATED BY \'\n\' IGNORE 1 LINES (isbn10,isbn13,price,discount,free_stock,report,report_date) SET RRP = IF(discount = 0.00,price-price * 45/100,IF(discount = 0.01,price,IF(discount != 0.00,price-price * discount/100,@RRP))), RRP_nl = RRP * 1.44 + 8, RRP_bl = RRP * 1.44 + 8, ID = NULL ')or die(mysqli_error()); $affected = (int) (mysqli_affected_rows($cons))-1; $log->lwrite('Inventory.CSV to database:'. $affected.' record inserted successfully.'); 

RRP和RRP_nl和RRP_bl不在csv中,但是我们计算出来并插入之后。

我得到了错误代码:1290. MySQL服务器正在运行–secure-file-priv选项,所以它不能执行这个语句

这对我在Windows 8.1 64位使用wampserver 3.0.6 64位的工作。

从C:\ wamp64 \ bin \ mysql \ mysql5.7.14编辑my.ini文件

删除条目secure_file_priv c:\ wamp64 \ tmp \(或者你在这里的任何目录)

停止一切 – 退出等等,并重新启动一切; 然后在C:\ wamp64 \ bin \ mysql \ mysql5.7.14 \ data \ u242349266_recur上打出我的cvs文件(最后一个dir是我的数据库名)

执行LOAD DATA INFILE'myfile.csv'

INTO表校友

FIELDS TERMINATED BY','

ENCLOSED BY'“'

LINES终止于'\ r \ n'

IGNORE 1 LINES

…和VOILA!

假设你正在使用xampp和phpmyadmin

你有文件名'ratings.txt'表名'评级'和数据库名'电影'

如果您的xampp安装在“C:\ xampp \”

复制“C:\ xampp \ mysql \ data \ movies”文件夹中的“ratings.txt”文件

 LOAD DATA INFILE 'ratings.txt' INTO TABLE ratings FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES; 

希望这可以帮助你省略你的错误,如果你正在做这个本地主机