mysq命令行导出sql_Mysql命令行模式如何导出查询结果数据

Mysql命令行模式如何导出查询结果数据

在日常的开发中,我们经常需要从数据库中导出数据。对于那种有图形化操作的,我们导出数据是非常方便的。比如SQLyog、Navicat这些工具可以直接将查询的结果导出。在这里我就不作介绍了,下面我们主要来说说在命令行模式下怎么将查询结果导出到文件。

本文中的操作环境:mysql5.6+CentOS6.6

下面给介绍一种简单的方式:

在命令行模式下执行:sql语句+into outfile +'/文件路径/文件名' + 编码方式(可选)

例如:

select * from test into outfile '/home/test.csv'; 下面我们看下执行结果:

导出查询结果图

你会发现

ERROR 1290 (HY000): The MySQL server is running with the

--secure-file-priv option so it cannot execute this statement

这种错误了。出现这种情况,应该是mysql设置的权限,我们可以通过执行 show variables like '%secure%';

查看当前的--secure-file-priv 值是什么。

show variables like '%secure%'; 执行的结果

这个时候,我们可以通过mysql安装路径下的my.ini配置文件,将secure_file_priv

的值改为/home/,但这种方式需求重启mysql服务,生产环境不允许我们这样操作。于是我们就将导出的文件目录指定到/var/lib/mysql-files/下,再来看执行效果:

修改导出文件的目录后的执行效果图

下面我去目标路径下查看是否真的已经生成了文件:

导出的结果

可以看出已经生成了文件。

至此,我们的导出工作结束。

ps:如果目标路径下已经存在相同的文件名,则导出失败。导出的文件格式可以是.csv/.xls/.txt的。导出的文件内容如果乱码可以在语句后面加上CHARACTER SET utf8(gbk)等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中的ONLY_FULL_GROUP_BY是一个SQL mode,它要求在GROUP BY子句中列出的每个列都必须出现在SELECT列表中,或者在聚合函数中使用。如果没有遵守这个规则,MySQL会抛出一个错误。 要使用SQL语句解决这个问题,有两种方法: 1. 将需要在SELECT列表中出现的列添加到SELECT语句中 例如,假设我们有一个表格student,其中包含姓名(name)、年龄(age)和成绩(score)三个字段。如果我们想要按照年龄分组,并计算每组的平均分数,我们可以这样写: ``` SELECT age, AVG(score) FROM student GROUP BY age; ``` 但是,如果ONLY_FULL_GROUP_BY被启用,MySQL会抛出一个错误,因为姓名字段没有在SELECT列表中出现。为了解决这个问题,我们可以将姓名字段添加到SELECT语句中,即使我们不需要它: ``` SELECT age, name, AVG(score) FROM student GROUP BY age, name; ``` 这样,我们就可以遵守ONLY_FULL_GROUP_BY的规则了。 2. 使用聚合函数 另一种方法是使用聚合函数将需要在GROUP BY子句中列出的列聚合起来。例如,我们可以将姓名字段使用GROUP_CONCAT函数聚合起来,从而避免将它添加到SELECT列表中: ``` SELECT age, GROUP_CONCAT(name), AVG(score) FROM student GROUP BY age; ``` 这个查询将返回每个年龄分组的平均分数和一个逗号分隔的姓名列表。注意,这种方法只适用于那些可以被聚合的列,例如字符串和数字类型。对于其他类型的列,我们需要使用第一种方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值