17

在 MySql 的解释器中,很容易将表格连同其字段名一起转储到屏幕上。

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

我正在尝试仅使用 SQL 或 Linux 命令行来执行此操作,而不用另一种语言编写程序。

谢谢

4

6 回答 6

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
于 2008-11-04T19:07:14.977 回答
9

这个小脚本应该这样做:

-- 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;
于 2012-04-02T12:29:28.637 回答
3

我以这种方式实现了这一点:

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

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

于 2012-06-22T17:08:01.957 回答
1

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

于 2008-11-04T19:07:50.173 回答
0

我创建了一个过程,使用 .csv 文件自动将大量表的内容导出到 .csv 文件SELECT ... INTO OUTFILE。如果您有类似的需求,请参考以下内容

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

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

于 2012-06-23T20:17:59.713 回答
0

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

echo "select user_pass from wp_users"| mysql -uroot -proot wp_database > passwordList.txt
于 2018-01-22T11:06:03.490 回答