使用 LOADDATAINFILE 从 CSV 文件导入 MySQL 中的数据

我正在从一个 CSV 文件导入一些20,000行的数据到 MySQL 中。

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

当我执行的时候

LOAD DATA INFILE 'abc.csv' INTO TABLE abc

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

将数据导入到 MySQL 的自动语法是什么?

515937 次浏览

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

可以使用 加载数据文件命令将 CSV 文件导入到表中。

检查链接 一个 href = “ http://dev.MySQL.com/doc/refman/5.7/en/LOAD-DATA.html”rel = “ norefrer”> < strong > 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 版本中不允许使用这个命令

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

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

  • 将从文件中导入数据的数据库表。
  • 一个 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 文件导出到表中。

可以从 CSV 或文本文件加载数据。

如果文本文件包含表中的记录,则可以在表中加载这些记录。

例如,如果有一个文本文件,其中每一行是一条记录,其中包含每一列的值,则可以通过这种方式加载记录。

文件

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

句法:

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;

在数据库中1分钟内大量插入超过7,000,000条记录(带计算的超快查询) :

    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 文件中,但是我们正在计算它们并在其后插入它们。

我正在

错误代码: 1290。 MySQL 服务器使用—— security-file-priv 选项运行,因此无法执行此语句

这对我在 视窗8.164位使用 WAMP服务器3.0.664位工作:

  • 我从 C: wamp64 bin mysql mysql5.7.14编辑了 my.ini 文件。

  • 删除条目 security _ file _ priv c: wamp64 tmp (或这里的任何目录)。

  • 我停止了所有操作ーー使用 退出干扰器等等ーー并重新启动了所有操作; 然后将我的 CVS 文件放在 C: wamp64 bin mysql mysql5.7.14 data u242349266 _ recur上(最后一个目录是我的数据库名称)

  • 我执行了死刑

     LOAD DATA INFILE 'myfile.csv'
    
    
    INTO TABLE alumnos
    
    
    FIELDS TERMINATED BY ','
    
    
    ENCLOSED BY '"'
    
    
    LINES TERMINATED BY '\r\n'
    
    
    IGNORE 1 LINES
    
  • 就是这样!

让我们假设您正在使用 XAMPPPhpMyAdmin

您有文件名‘ ratings.txt’表名‘ atings’和数据库名‘ film’。

如果您的 XAMPP 安装在“ C: XAMPP”中,请将“ ratings.txt”文件复制到“ C: XAMPP mysql data film”文件夹中。

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

如果您在本地主机上执行此操作,则可能会有效。

您可以尝试这样插入:

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

到这些天(2019年底) ,我更喜欢使用像 把 CSV 转换成 SQL这样的工具。

如果有很多行,那么当 CSV 来自最终的用户电子表格时,可以运行分区块以避免用户错误。

  1. 编辑 我的小妹妹文件并在 [mysqld]节下添加以下 secure-file-priv = ""。此外,如果已经有任何变量设置,然后删除该。

  2. 然后重新启动 MySQL 服务并执行以下命令来检查值是否已成功更改:

    SHOW VARIABLES LIKE "secure_file_priv";

  3. 然后您可以在已安装的 MySQL 系统中执行以下查询并导入数据,

    LOAD DATA INFILE "csv file location" INTO TABLE tablename
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
    IGNORE 1 LINES
    (column1,column2,.....);
    

    注意: (按照 csv 文件,列名用逗号分隔)

  4. 要从任何其他远程系统添加任何 CSV 文件,您还可以在上述步骤之后执行以下操作:

    show global variables like 'local_infile';
    -- Note: if the value is OFF then execute the next command below
    set global local_infile=true;
    -- check back again if the value has been set to ON or not
    
  5. 执行以下命令从任何其他系统的 CSV 文件导入数据,

    LOAD DATA LOCAL INFILE "csv file location" INTO TABLE tablename
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
    IGNORE 1 LINES
    (column1,column2,.....);
    -- column name separated by comma as per csv file