将文件从客户端导入到远程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;

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

使用LOCAL选项时,连接到MySQL服务器的帐户无需具有FILE特权即可导入文件。

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

将CSV文件导入MySQL表

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

LOAD DATA INFILE语句使您可以从文本文件中读取数据并将文件的数据快速导入数据库表中。

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

  • 数据库表,文件中的数据将导入到该数据库表中。

  • 一个CSV文件,其数据与表的列数和每列中的数据类型相匹配。

  • 连接到MySQL数据库服务器的帐户具有FILE和INSERT特权。

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

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

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

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

以下语句将数据从c:\ tmp \ discounts.csv文件导入折扣表。

LOAD DATA INFILE 'c:/tmp/discounts.csv' 
INTO TABLE discounts 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

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

CSV文件的每一行都以换行符结尾,换行符由LINES TERMINATED BY'\ n'表示。

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

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

SELECT * FROM discounts;

使用MySQL Workbench导入CSV文件

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

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

打开要向其加载数据的表。

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

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

MySQL工作台将显示一个对话框"将SQL脚本应用于数据库",单击"应用"按钮以将数据插入表中。

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

导入时转换数据

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

假设Discount_2.csv文件中的到期日期列为mm / dd / yyyy格式。

将数据导入折扣表时,我们必须使用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');
日期:2019-11-20 08:52:12 来源:oir作者:oir