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;
希望这可以帮助你省略你的错误,如果你正在做这个本地主机