127

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

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

当我执行

LOAD DATA INFILE'abc.csv' INTO TABLE abc

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

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

4

11 回答 11

206

您可以使用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关键字 hold 安全风险,从 MySQL 8.0 开始,该LOCAL功能False默认设置为。您可能会看到以下错误:

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

您可以按照文档中的说明覆盖它。请注意,这种覆盖并不能解决安全问题,而只是承认您意识到并愿意承担风险。

于 2013-01-03T05:52:52.070 回答
59

您可能需要设置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;
于 2013-01-03T05:14:36.867 回答
53

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

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

假设我们有下表:

在此处输入图像描述

使用以下查询创建表:

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 文件的绝对路径

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

于 2015-09-16T09:49:19.530 回答
17

句法:

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;
于 2016-10-20T13:14:26.983 回答
12

1分钟内在数据库中批量插入超过7000000条记录(带计算的超快速查询)

    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,
         ID = NULL

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

于 2017-02-17T06:34:07.180 回答
2

假设您正在使用 xampp 和 phpmyadmin

你有文件名 'ratings.txt' 表名 'ratings' 和数据库名 'movies'

如果您的 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 上执行此操作,希望这可以帮助您省略错误

于 2017-10-07T18:00:26.943 回答
2

如果您LOAD DATA LOCAL INFILE从 windows shell 运行,并且需要使用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
于 2016-10-06T23:13:20.523 回答
1

到现在(2019 年底)我更喜欢使用像http://www.convertcsv.com/csv-to-sql.htm这样的工具, 我有很多行可以运行分区块,当 csv 来自最终用户电子表格。

于 2019-11-13T17:17:00.130 回答
1

您可以尝试像这样插入:

LOAD DATA INFILE '/tmp/filename.csv' replace INTO TABLE [table name] FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (field1,field2,field3);
于 2018-11-26T06:57:04.543 回答
0

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

这在使用 wampserver 3.0.6 64 位的 Windows 8.1 64 位上对我有用。

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

删除条目 secure_file_priv c:\wamp64\tmp\ (或您在此处拥有的任何目录)

停止一切 - 退出 wamp 等 - 并重新启动一切;然后将我的 cvs 文件放在 C:\wamp64\bin\mysql\mysql5.7.14\data\u242349266_recur 上(最后一个目录是我的数据库名称)

执行 LOAD DATA INFILE 'myfile.csv'

INTO表校友

以“,”结尾的字段

由'"'包围

以“\r\n”结尾的行

忽略 1 行

……瞧!

于 2017-08-30T02:37:24.640 回答
0

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

表.sql

id //field 1

name //field2

表.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'; 
于 2016-10-06T03:09:44.933 回答