Mysql 简明教程

MySQL - Export Table into CSV File

MySQL 是一个开放源代码关系数据库管理系统,允许我们存储和管理大量数据。它的主要一项功能是从表格导出各种格式的数据,CSV 就是其中一种格式。CSV 是 "Comma Separated Values" 文件的缩写。

Export MySQL Table into CSV File

要将 MySQL 表格数据导出成 CSV 文件,可以使用 MySQL "SELECT INTO …​ OUTFILE" 语句。在将任何表格数据导出成数据库服务器中的 CSV 文件之前,我们必须确保以下事项:

  1. MySQL 服务器进程必须拥有针对指定目标文件夹的读/写权限,此文件夹中将会创建 CSV 文件。

  2. 指定 CSV 文件应已存在于系统中(无重复文件)。

导出的 CSV 文件可以包含来自一个或多个表格的数据,并且可以修改成仅包含特定列或行。

Syntax

以下是 SELECT INTO …​ OUTFILE 语句的语法:

SELECT column_name1, column_name2,...
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/file_name.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';

其中,

  1. INTO OUTFILE 是我们要将表格数据导出的 CSV 文件的路径和名称。

  2. FIELDS TERMINATED BY 是分隔导出 CSV 文件中栏位的定界符。

  3. *LINES TERMINATED * 是导出 CSV 文件的行分隔符。

Storage Location of Exported .csv File

在 MySQL 中,导出文件(例如 .csv 文件)时,导出文件的默认存储位置由 “secure_file_priv” 变量决定。

要找出导出文件的默认路径,可以使用以下 SQL 查询:

SHOW VARIABLES LIKE "secure_file_priv";

我们获得以下输出 −

在将数据导出到 .csv 文件之前,需要在 MySQL 数据库中至少有一个表。我们使用以下 SQL 查询创建一个名为 “CUSTOMERS” 的表:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

现在,我们将数据插入上面创建的表中,如下所示:

INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, NULL, 2000.00 ),
(4, 'Chaitali', NULL, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, NULL, 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

获得的 CUSTOMERS 表如下所示:

Exporting MySQL Data in CSV Format

可以使用 SELECT INTO …​ OUTFILE 语句将 MySQL 数据导出到 CSV 文件。在此,我们使用以下查询将 CUSTOMERS 表的数据导出到名为 “CUSTOMERS_BACKUP” 的 CSV 文件:

SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP.csv'
FIELDS ENCLOSED BY '"'
TERMINATED BY ';'
ESCAPED BY '"'
LINES TERMINATED BY '\r\n';

执行上述查询后,CSV 格式文件将在指定路径处创建。以下是执行上述查询后获得的输出 -

Query OK, 7 rows affected (0.01 sec)

打开 "CUSTOMERS_BACKUP.csv" 文件时的图像如下:

mysql export table into csv file image

Handling File Already Exists Error −

如果尝试将数据导出到已存在的文件中,MySQL 将生成错误:

SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP.csv'
FIELDS ENCLOSED BY '"'
TERMINATED BY ';'
ESCAPED BY '"'
LINES TERMINATED BY '\r\n';

以下是获得的错误 −

ERROR 1086 (HY000): File 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP.csv' already exists

为避免此错误,在执行导出查询之前,可以要么选择其他文件名,要么删除现有文件。

Removing Enclosing Quotes for Numeric Records −

默认情况下,CSV 文件中的所有记录都用双引号括起来,包括数字值。如果要为数字记录删除引号,可以在 ENCLOSED BY 子句前使用 OPTIONAL 子句,如下所示:

SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';

以下是执行上述查询后获得的输出:

Query OK, 7 rows affected (0.00 sec)

如我们在下方的 CSV 文件图像中看到的,已为数字记录删除了双引号 (“”)。

mysql export table into csv file image2

Exporting Table Data Along with Column Headings

若要导出表数据及其各自的列标题,可以使用 UNION ALL 语句。这允许你创建带有列名称的行,然后追加数据行。以下是一个示例查询:

SELECT 'ID', 'NAME', 'EMAIL', 'PHONE', 'CITY'
UNION ALL
SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';

Output

获得的输出如下 −

Query OK, 8 rows affected (0.01 sec)

Verification

如果验证 .csv 文件,我们可以看到添加了各自的列名称:

mysql export table into csv file image3

Exporting Table Data Without Specifying Column Names

你还可以将表数据导出到 CSV 文件中,而不指定列名称。

Syntax

以下是在不指定列名称的情况下将表数据导出到 CSV 文件中的语法:

TABLE table_name ORDER BY column_name LIMIT 100
INTO OUTFILE '/path/filename.txt'
FIELDS ENCLOSED BY '"'
TERMINATED BY ';'
ESCAPED BY '"'
LINES TERMINATED BY '\r\n';;

Example

在以下查询中,我们将 CUSTOMERS 表数据导出到 “CUSTOMER_BACKUP.csv” 文件,不指定它们的列名称:

TABLE CUSTOMERS ORDER BY NAME LIMIT 100
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP.csv'
FIELDS ENCLOSED BY '"'
TERMINATED BY ';'
ESCAPED BY '"'
LINES TERMINATED BY '\r\n';

Output

产生的结果如下 −

Query OK, 7 rows affected (0.01 sec)

Verification

如我们可以在 “CUSTOMERS_BACKUP.csv” 文件中看到的,表数据已导出:

mysql export table into csv file image4

Replacing NULL Values

如果你的表包含 NULL 值,可以在将数据导出到 CSV 文件之前使用 IFNULL() 函数将它们替换为特定值。

Example

在以下查询中,IFNULL()\ 函数用于用“NULL_VALUE”替换“ADDRESS”列中的空值,如下所示:

SELECT ID, NAME, AGE, IFNULL(ADDRESS, 'NULL_VALUE') FROM CUSTOMERS
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP.csv'
FIELDS ENCLOSED BY '"'
TERMINATED BY ';'
ESCAPED BY '"'
LINES TERMINATED BY '\r\n';

Output

获得的结果如下所示 −

Query OK, 7 rows affected (0.00 sec)

Verification

空值 (N) 用“NULL_VALUE”替换

mysql export table into csv file image5

Using Client Program

我们还可以使用客户端程序将表导出到 CSV 文件中。

Syntax

Example

以下是这些程序 −