如何将MySql表导出/转储到包含字段名称(也称为标题或列名称)的文本文件中

Dan*_*ein 16 mysql field export header

在MySql的解释器中,将表格及其字段名称转储到屏幕上非常容易.

似乎没有简单的方法将表导出到制表符分隔或CSV输出文件,包括其列标题.

我正在尝试仅使用SQL或Linux命令行执行此操作,而无需使用其他语言编写程序.

谢谢

Vin*_*vic 20

将查询管道输出到命令行客户端会输出一个以制表符分隔的列表,其中列名称为第一行

$ echo "select * from surveys limit 5" | mysql -uroot -pGandalf surveys
phone   param1  param2  param3  param4  p0      p1      p2      p3      audio4  code    time
XXXXXXXXX       2008-07-02      11:17:23        XXXXXXXX        SAT     -       -       -       -       -       ERROR   2008-07-02 12:18:32
XXXXXXXXX       2008-07-02      11:22:52        XXXXXXXX        SAT     -       -       -       -       -       COLGADO 2008-07-02 12:04:29
XXXXXXXXX       2008-07-02      11:41:29        XXXXXXXX        SAT     -       -       -       -       -       COLGADO 2008-07-02 12:07:22
XXXXXXXXX       2008-07-02      12:16:19        XXXXXXXX        SAT     1       1       1       9       XXXXXXXXX_4.wav     OK      2008-07-02 16:14:27
XXXXXXXXX       2008-07-02      08:21:25        XXXXXXXX        SAT     1       1       1       1       XXXXXXXXX_4.wav     OK      2008-07-02 12:29:40
Run Code Online (Sandbox Code Playgroud)

  • 这是一个hack而不是mysql提供的功能.我想它可能不适用于其他操作系统. (3认同)
  • 这本身不是黑客行为。当然,它可能无法在不提供健全的命令行界面和 mysql 命令行客户端的系统上运行。 (2认同)

小智 9

这个小脚本应该这样做:

- 1.在这里选择表格和输出文件/这应该是唯一的输入

select 'mytable' into @tableName;
select 'c://temp/test.csv' into @outputFile;
Run Code Online (Sandbox Code Playgroud)

- 2.以适合查询的格式获取列名称

select group_concat(concat("'",column_name, "'")) into @columnNames from information_schema.columns
where table_name=@tableName;
Run Code Online (Sandbox Code Playgroud)

- 3.构建查询

SET @query = CONCAT(
"select * from
((SELECT ",@columnNames,")
UNION
(SELECT * FROM `",@tableName,"`)) as a
INTO OUTFILE '", @outputFile, "'");
Run Code Online (Sandbox Code Playgroud)

- 4.执行查询

PREPARE stmt FROM @query;
EXECUTE stmt;
Run Code Online (Sandbox Code Playgroud)