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

StackOverflow https://stackoverflow.com/questions/262924

  •  06-07-2019
  •  | 
  •  

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

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

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

谢谢

有帮助吗?

解决方案

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

$ 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

其他提示

这个小脚本应该这样做:

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

select 'mytable' into @tableName;
select 'c://temp/test.csv' into @outputFile;

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

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

- 3.构建查询

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

- 4.执行查询

PREPARE stmt FROM @query;
EXECUTE stmt;

我用这种方式实现了这个目标:

echo "select * from table"| mysql database -B -udbuser -puser_passwd | sed s/\\t/,/g > query_output.csv

mysql的-B选项用制表符分隔列,这些制表符使用sed转换为逗号。请注意,标题也会生成。

您可以使用 mysqldump 命令执行此操作。看看--tab和--xml选项。

我已经创建了一个过程,通过 SELECT ... INTO OUTFILE 自动将大量表的内容导出到.csv文件。如果您需要这样的话,请参考以下内容

http://lifeboysays.wordpress.com/2012/06/23/mysql-how-to-export-data-to-csv-with-column-headers/

它使用cafe876描述的方法,但适用于一个或整个系列的表,另外你可以设置要使用的分隔符和引号字符。

我使用了上面的命令并根据我的要求进行了修改。
我需要从文本文件中的wordpress mysql数据库中获取密码列,为此我使用以下命令

echo "select user_pass from wp_users"| mysql -uroot -proot wp_database > passwordList.txt
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top