📜  mysql 到带有标头的 outfile - SQL (1)

📅  最后修改于: 2023-12-03 15:03:06.197000             🧑  作者: Mango

MySQL 到带有标头的 OUTFILE - SQL

在 MySQL 中,OUTFILE 关键字用于将查询结果输出到文件中。通过使用 OUTFILE,可以将结果以 CSV 或者类似于标准 SQL 导出的格式导出到文件中。

使用方式

使用样例:

SELECT column1, column2, column3
FROM table1
INTO OUTFILE '/path/to/output/file.csv'
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
  • SELECT column1, column2, column3:查询的列名,用于将指定列的值写入到外部文件中。
  • FROM table1:查询的表名。
  • INTO OUTFILE '/path/to/output/file.csv':将查询结果导出到指定的输出文件中。
  • FIELDS TERMINATED BY ',':定义分隔符为逗号。
  • ENCLOSED BY '"':定义每一条记录的围栏为双引号,避免记录中的逗号被误解。
  • LINES TERMINATED BY '\n':定义每一行记录的结束符为换行符。
将结果输出到包含标头的 CSV 文件中

使用 OUTFILE 导出 CSV 文件时,在文件中不包含列名的设置。如果需要在输出的 CSV 文件中包含列名,则可以采用以下两种方法:

1. 使用 UNION ALL 子句
SELECT 'column1', 'column2', 'column3'
UNION ALL
SELECT column1, column2, column3
FROM table1
INTO OUTFILE '/path/to/output/file.csv'
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

该方法的缺点在于需要在查询中定义两次相同的查询逻辑。

2. 使用 sed 命令在输出文件的顶部插入列名

在 MySQL 中,通过使用管道方式将结果发送到 sed 命令中,可以在输出的 CSV 文件的顶部插入列名。

SELECT column1, column2, column3
FROM table1
INTO OUTFILE '/path/to/output/file.csv'
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n';
$ sed -i '1s/^/column1,column2,column3\n/' /path/to/output/file.csv
注意事项
  • 在 MySQL 用户对应的文件系统中,必须有文件输出的权限。
  • OUTFILE 关键字不能写在子查询中。
  • 在 MySQL 5.5 或更新版本中,应将 --secure-file-priv 设置为指定的目录,以允许 MySQL 从选择的文件目录中读取文件,可以通过在 my.cnf 配置文件中指定用户能够访问的目录来实现。
参考链接