在MySql的解释器中,将表格及其字段名称转储到屏幕上非常容易。
似乎没有简单的方法将表格导出到制表符分隔或CSV文件,包括其列标题。
我正在尝试仅使用SQL或Linux命令行执行此操作,而无需使用其他语言编写程序。
谢谢
答案 0 :(得分: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
答案 1 :(得分: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;
答案 2 :(得分:3)
我用这种方式实现了这个目标:
echo "select * from table"| mysql database -B -udbuser -puser_passwd | sed s/\\t/,/g > query_output.csv
mysql的-B选项用制表符分隔列,这些制表符使用sed转换为逗号。请注意,标题也会生成。
答案 3 :(得分:1)
您可以使用mysqldump命令执行此操作。看看--tab和--xml选项。
答案 4 :(得分:0)
我已经创建了一个过程,可以使用SELECT ... INTO OUTFILE
自动将大量表的内容导出到.csv文件。如果您需要这样的话,请参考以下内容
http://lifeboysays.wordpress.com/2012/06/23/mysql-how-to-export-data-to-csv-with-column-headers/
它使用cafe876描述的方法,但适用于一个或整个系列的表,另外你可以设置要使用的分隔符和引号字符。
答案 5 :(得分:0)
我使用了上述命令并根据我的要求进行了修改 我需要从文本文件中的wordpress mysql数据库中获取密码列,为此我使用以下命令
echo "select user_pass from wp_users"| mysql -uroot -proot wp_database > passwordList.txt