Import CSV File Into MySQL Table

本教程向您展示如何使用LOAD DATA INFILE语句将 CSV 文件导入 MySQL 表。

LOAD DATA INFILE语句允许您从文本文件中读取数据并将文件的数据非常快速地导入到数据库表中。

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

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

假设我们有一个名为discounts表,其结构如下:

discounts table

我们使用CREATE TABLE 语句创建discounts表,如下所示:

CREATE TABLE discounts (
    id INT NOT NULL AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    expired_date DATE NOT NULL,
    amount DECIMAL(10 , 2 ) NULL,
    PRIMARY KEY (id)
);Code language: SQL (Structured Query Language) (sql)

以下discounts.csv文件包含第一行作为列标题和其他三行数据。

折扣 csv 文件

以下语句将c:\tmp\discounts.csv文件中的数据导入到discounts表中。

LOAD DATA INFILE 'c:/tmp/discounts.csv' 
INTO TABLE discounts 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;Code language: SQL (Structured Query Language) (sql)

文件的字段以FIELD TERMINATED BY ','指示的逗号终止,并用ENCLOSED BY '" ' 指定的双引号括起来。

CSV 文件的每一行均以换行符终止,换行符由LINES TERMINATED BY '\n'指示。

由于该文件的第一行包含列标题,不应将其导入表中,因此我们通过指定IGNORE 1 ROWS选项来忽略它。

现在,我们可以检查discounts表,看看数据是否导入。

SELECT * FROM discounts;
折扣表数据

导入时转换数据

有时数据的格式与表中的目标列不匹配。在简单的情况下,您可以使用LOAD DATA INFILE语句中的SET子句对其进行转换。

假设discount_2.csv文件中的过期日期列采用mm/dd/yyyy格式。

discount_2.csv file

将数据导入discounts表时,我们必须使用str_to_date() 函数将其转换为 MySQL 日期格式,如下所示:

LOAD DATA INFILE 'c:/tmp/discounts_2.csv'
INTO TABLE discounts
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(title,@expired_date,amount)
SET expired_date = STR_TO_DATE(@expired_date, '%m/%d/%Y');Code language: SQL (Structured Query Language) (sql)

将文件从客户端导入到远程 MySQL 数据库服务器

可以使用LOAD DATA INFILE语句将数据从客户端(本地计算机)导入到远程 MySQL 数据库服务器。

当您在LOAD DATA INFILE中使用LOCAL选项时,客户端程序会读取客户端上的文件并将其发送到 MySQL 服务器。该文件将上传到数据库服务器操作系统的临时文件夹,例如 Windows 上的C:\windows\temp或 Linux 上的/tmp 。该文件夹不可配置或由 MySQL 确定。

让我们看一下下面的例子:

LOAD DATA LOCAL INFILE  'c:/tmp/discounts.csv'
INTO TABLE discounts
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;Code language: SQL (Structured Query Language) (sql)

唯一的区别是语句中的LOCAL选项。如果加载一个大的 CSV 文件,您会发现使用LOCAL选项,加载文件会稍微慢一些,因为将文件传输到数据库服务器需要时间。

当您使用LOCAL选项时,连接到 MySQL 服务器的帐户不需要具有 FILE 权限来导入文件。

使用LOAD DATA LOCAL将文件从客户端导入到远程数据库服务器存在一些安全问题,您应该注意这些问题以避免潜在的安全风险。

使用 MySQL Workbench 导入 CSV 文件

MySQL Workbench 提供了将数据导入表的工具。它允许您在进行更改之前编辑数据。

以下是将数据导入到表中的步骤:

打开要加载数据的表。

mysql工作台导入csv

单击“导入”按钮,选择一个 CSV 文件,然后单击“打开”按钮

将csv导入mysql

查看数据,单击“应用”按钮。

编辑表格内容
Review Data

MySQL Workbench 将显示一个对话框“将 SQL 脚本应用到数据库”,单击“应用”按钮将数据插入到表中。

我们向您展示了如何使用LOAD DATA LOCAL和 MySQL Workbench 将 CSV 导入 MySQL 表。通过这些技术,您可以从其他文本文件格式(例如制表符分隔)加载数据。

本教程有帮助吗?