将mysql的查询结果导出为csv

时间:2024-03-17 10:18:09

直接使用mysql导出csv方法

我们可以使用 into outfile, fields terminated by, optionally enclosed by, line terminated by语句实现导出csv 

语句的格式与作用

into outfile ‘导出的目录和文件名’ 
指定导出的目录和文件名

fields terminated by ‘字段间分隔符’ 
定义字段间的分隔符

optionally enclosed by ‘字段包围符’ 
定义包围字段的字符(数值型字段无效)

lines terminated by ‘行间分隔符’ 

定义每行的分隔符

有的时候需要把在一张表中用 select 语句查询出来的结果保存到另一张结构相同的表中,可以有几种方法来实现:

方法一:

在命令行下使用一对SQL语句完成该操作:

导出查询结果:Select语句 into outfile '保存路径+文件名';

导入查询结果:load data local infile '保存路径+文件名' into table 表明 character set utf8;

 

例如:

查询出数据库jc1992中表jc_archives中发布时间晚于2014年9月1日的数据并保存在本地磁盘D的mysqltmp目录下,保存为1.sql,在命令行中输入:

SELECT * from jc_archives where senddate>UNIX_TIMESTAMP('2014-9-1' ) into outfile 'D://mysqltmp/1.sql';

命令行如图:

 将mysql的查询结果导出为csv

1.sql用EditPlus打开如图:

将mysql的查询结果导出为csv

 

再把保存查询结果的1.sql导入到另一数据库data_tmp的表archives中,在命令行中输入:

load data local infile "D://mysqltmp/1.sql" into table archives character set utf8;

命令行如图:

将mysql的查询结果导出为csv

 

这样就把第一张表中的查询结果导入了第二张表。

将mysql的查询结果导出为csv

 

要注意的是在导入时,两张表的主键或者唯一索引的值不能有重复,否则会跳过不执行或者报警告:

将mysql的查询结果导出为csv

 

方法二:

导出查询结果:使用MySQL自带的转存数据库工具musqldump

命令行进入musqldump,使用语句

mysqldump -u用户名 -p -c --default-character-set=字符集 数据库名 数据表 --where="查询条件" > 保存路径和文件名

导入查询结果:mysql -u用户名 -p -c --default-character-set=字符集 数据库名 < 保存路径和文件名

 

例如:

查询出数据库jc1992中jc_arctiny的发布时间晚于2014年9月1日的数据并保存在本地磁盘D的mysqltmp目录下,保存为2.sql,在命令行中输入:

mysqldump -uroot -p -c --default-character-set=utf8 jc1992 jc_arctiny --where="senddate>UNIX_TIMESTAMP('2014-9-1')" > D:\mysqltmp\2.sql

命令行如图:

将mysql的查询结果导出为csv

 

2.sql中保存的是完整的SQL语句,用记事本打开如图:

将mysql的查询结果导出为csv

将mysql的查询结果导出为csv

 

再把保存查询结果的2.sql导入到另一数据库data_tmp的表中,在命令行中输入:

mysql -uroot -p -c --default-character-set=utf8 data_tmp < D:\mysqltmp\2.sql

命令行如图:

将mysql的查询结果导出为csv

此时数据库data_tmp中多了一张表jc_arctiny,表里的数据正是查询出来的的那部分数据。

将mysql的查询结果导出为csv

 

注意:此方法导出时用的是mysqldump工具,而导入时用的是mysql命令。而且此方法由于导出的是完整的SQL语句,包括创建和设计数据库,所以只适用于恢复数据,而不适用于将一张表中的数据导入到另一张表里,不过,也可以使用保存文件中的INSERT语句把查询出的数据插入到另一张表中,过程要周折一些。方法一对于SQL语句的设计更灵活一些。