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

时间:2013-01-02 18:55:23

标签: mysql csv import load-data-infile

我将一些包含20000行的数据从CSV文件导入Mysql。

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

执行时

LOAD DATA INFILE'abc.csv' INTO TABLE abc

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

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

11 个答案:

答案 0 :(得分:143)

您可以使用 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...);

对于MySQL 8.0用户:

使用LOCAL关键字保存安全风险,从MySQL 8.0开始,LOCAL功能默认设置为False。您可能会看到错误:

  

错误1148:此MySQL版本不允许使用的命令

您可以按照instructions in the docs覆盖它。 请注意,这种覆盖并不能解决安全问题,而只是承认您已经意识到并愿意承担风险。

答案 1 :(得分:46)

您可能需要设置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;

答案 2 :(得分:45)

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

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

假设我们有以下表格:

enter image description here

使用以下查询创建表:

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文件必须正确格式化,例如见下文   附加图像:

enter image description here

如果一切正常..请执行以下查询以从CSV文件中加载数据:

  

注意:请添加CSV文件的绝对路径

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导出到表格

答案 3 :(得分:14)

Syntax:

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}]

See this Example:

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;

答案 4 :(得分:6)

在数据库中以1分钟为单位插入超过7000000条记录(计算超高速查询)

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中,但是在插入之后我们计算出来。

答案 5 :(得分:2)

假设您正在使用xampp和phpmyadmin

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

如果您的xampp安装在" C:\ xampp \"

复制你的" ratings.txt"文件在" C:\ xampp \ mysql \ data \ movies"文件夹

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

希望如果您在localhost上执行此操作,这可以帮助您省略错误

答案 6 :(得分:0)

您可以从csv或文本文件加载数据。 如果您有一个包含表中记录的文本文件,则可以在表中加载这些记录。 例如,如果您有一个文本文件,其中每一行都是一个包含每列值的记录,您可以这样加载记录。

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'; 

答案 7 :(得分:0)

如果从Windows shell运行udaExec = teradata.UdaExec(odbcLibPath='/opt/teradata/client/15.00/odbc_64/lib/libodbc.so', ...) ,并且需要使用LOAD DATA LOCAL INFILE,则必须执行以下操作才能正确转义字符:

OPTIONALLY ENCLOSED BY '"'

答案 8 :(得分:0)

我收到错误代码:1290。MySQL服务器正在运行--secure-file-priv 选项,因此它无法执行此语句

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

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

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

停止一切 - 退出战士等 - 并重新开始一切;然后将我的cvs文件放在C:\ wamp64 \ bin \ mysql \ mysql5.7.14 \ data \ u242349266_recur(最后一个dir是我的数据库名称)

执行 LOAD DATA INFILE' myfile.csv'

INTO TABLE alumnos

FIELDS终止于','

包含'"'

由' \ r \ n'

终止的线路

IGNORE 1 LINES

......和VOILA !!!

答案 9 :(得分:0)

您可以尝试这样插入:

LOAD DATA INFILE '/tmp/filename.csv' replace INTO TABLE [table name] FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (field1,field2,field3);

答案 10 :(得分:0)

到目前为止(截至2019年),我更喜欢使用http://www.convertcsv.com/csv-to-sql.htm之类的工具 我有很多行可以运行分区块,从而在csv来自最终用户电子表格时可以节省用户错误。