将MySQL表导出为csv文件

use*_*713 24 mysql csv mysql-workbench

我有一个MySQL表必须作为csv文件取出,我使用的查询是

SELECT "ID","NAME","SALARY","SAL1","SAL2","SAL3","SAL4","SAL5","SAL6","SAL7","SAL8","SAL9","SAL10","SAL11","SAL12","SAL13","SAL14","SAL15","SAL16","SAL17","SAL18","SAL19","SAL20","SAL21","SAL22","SAL23","SAL24","SAL25","SAL26"
UNION ALL
SELECT *
FROM addstock25
INTO OUTFILE "E:\\JOSE DATA\\addstock7.csv"
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
Run Code Online (Sandbox Code Playgroud)

此查询有效,如果我有200个列名称怎么办?没有手动输入它有没有办法做到这一点?

Rem*_*ems 54

这个命令几乎可以满足您的需求,甚至可以与远程服务器配合使用.唯一需要注意的是它会生成一个TSV文件(字段由选项卡分隔).

mysql mydb -e "select * from mytable" -B > mytable.tsv 
Run Code Online (Sandbox Code Playgroud)

但是你可以使用sed将它转换为CSV,如本回答所示

mysql mydb -e "select * from mytable" -B | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g" > mytable.csv
Run Code Online (Sandbox Code Playgroud)


小智 5

DESCRIBE addstock25;\n
Run Code Online (Sandbox Code Playgroud)\n\n

删除第一列和该列的前三个条目(这取决于您的使用情况)。您将获得 addstock25 中的字段列表。

\n\n

这将只带来使用核心中派生的虚拟表的字段名称...称为信息模式。

\n\n
SELECT `COLUMN_NAME` \nFROM `INFORMATION_SCHEMA`.`COLUMNS` \nWHERE `TABLE_NAME`=\'foo\';\n
Run Code Online (Sandbox Code Playgroud)\n\n

令\xe2\x80\x99s 表示该查询的名称为sq_fieldnamelist。

\n\n

因此,上表有一列,其中包含“foo”表的字段名称。

\n\n

如果直接写成这样

\n\n
SELECT (sq_fieldnamelist)\nUNION ALL\nSELECT *\nFROM addstock25\nINTO OUTFILE "E:\\\\JOSE DATA\\\\addstock7.csv"\nFIELDS TERMINATED BY \',\'\nENCLOSED BY \'"\'\nLINES TERMINATED BY \'\\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

MySQL会报错。“子查询返回多行”

\n\n

我们必须编辑 sq_fieldnamelist 以将所有条目背靠背连接,并用逗号分隔。

\n\n
Select GROUP_CONCAT(COLUMN_NAME)\nFROM\n(SELECT `COLUMN_NAME` \nFROM `INFORMATION_SCHEMA`.`COLUMNS` \nWHERE `TABLE_NAME`=\'ffd_companies\'\nLIMIT 3,100\n) AS fafa\nGROUP BY \'COLUMN_NAME\' // This group by is just to make group concatenation work\n
Run Code Online (Sandbox Code Playgroud)\n\n

假设这是 sq_fieldnamelist2。

\n\n

如果我们像这样编辑 sq_fieldnamelist ,它将只返回一个值,即所有字段名称以逗号分隔。现在我们可以将这个子查询放在 select 语句中来获取所需的字段。

\n\n
SELECT (sq_fieldnamelist2)\nUNION ALL\nSELECT *\nFROM addstock25\nINTO OUTFILE "E:\\\\JOSE DATA\\\\addstock7.csv"\nFIELDS TERMINATED BY \',\'\nENCLOSED BY \'"\'\nLINES TERMINATED BY \'\\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

您需要根据自己的目的编辑 sq_fieldnamelist2 中的 LIMIT 3,100。

\n\n

假设您的表类似于 fil1、fil2...filN、sal1、sal2、sal3...、salI。要查看唯一的工资字段,您应该使用LIMIT N, x > I+N。如果您想查看全部,请使用LIMIT 0, x > N+I.

\n