CSV 是逗号分隔值(Comma-Separated Values)文件,它允许以表格格式保存数据。长期以来,它一直是在数据库之间传输数据的首选格式。最近,XML 和 JSON 等的互联网驱动格式也获得了很大的关注。CSV 文件非常适合用于数据库,因为它们能非常好地表示表数据,并且几乎可以与任何电子表格程序一起使用,例如 Microsoft Excel 或 Google 表格。在今天的文章中,我们将介绍几种在 MySQL 中将表数据导出到 CSV 的方法。
使用命令行
包括 MySQL 在内的大多数关系数据库都提供导出到 CSV 和从 CSV 导入的命令。
请确保使用 –secure-file-priv 选项启动 MySQL 服务器实例。它使用 LOAD DATA 和 SELECT INTO FILE 等语句设置 MySQL 导入和导出数据的目录。你可以使用以下命令查看当前设置:
SHOW VARIABLES LIKE "secure_file_priv"
现在要做的就是选择数据并指定输出文件的位置。以下是一个输出整个表的语句:
TABLE tableName INTO OUTFILE 'path/outputFile.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '' LINES TERMINATED BY '\n';
你还可以像在任何 SELECT 查询中一样筛选数据。以下是一个同时筛选列和值的示例:
SELECT columnName, ... FROM tableName WHERE columnName = 'value' LIMIT 1000 INTO OUTFILE 'path/outputFile.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '' LINES TERMINATED BY '\n';
想要包含列标题?使用 UNION 语句很容易做到这一点:
(SELECT 'columnHeading', ...) UNION (SELECT column, ... FROM tableName INTO OUTFILE 'path-to-file/outputFile.csv’' FIELDS ENCLOSED BY '"' TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n')
使用 mysqldump
mysqldump 是 MySQL 提供的用于导出表、数据库和整个服务器的命令行实用程序。此外,它还可以用于备份和恢复。你可以在命令提示符或终端中发出以下命令以导出表:
mysqldump -u [username] -p -t -T/path/to/directory [database] [tableName] --fields-terminated-by=,
使用 Navicat 的导出向导
Navicat 16 for MySQL 有一个非常强大的导出(和导入)向导,可以将数据导出到多种格式,包括 .xlsx、.json 和 .sql。若要启动导出向导,请选择相应的表,按右键 -> 导出向导,然后选择格式:
你可以选择导出一个表、整个数据库或介于两者之间的任何表:
如果你不想导出所有列,还可以选择所需的字段:
Navicat 有很多选项,例如包括标题、分隔符、错误处理程序等等:
总结
CSV 并不是一种完美的格式,并且确实有一定的局限性。例如,你不能以这种格式保存数据类型或公式。话虽如此,CSV 仍然是一种非常重要的数据传输格式,每个 DBA 都应该熟悉它。