首页 > 数据库 >mysql将查询结果导出到txt/csv文件

mysql将查询结果导出到txt/csv文件

时间:2022-10-12 10:22:20浏览次数:56  
标签:csv users INTO MySQL file mysql txt kalacloud name

日常工作中,我们经常需要将查询结果保存出来,然后放在数据处理软件中跑分析,或者和小组同学共享数据协同处理。好在 MySQL / MariaDB 内置查询结果保存工具,只要注意一些细节和可能碰到的常见错误,即可游刃有余的将查询出的数据保存到文件。

准备示例数据

CREATE DATABASE IF NOT EXISTS kalacloud_demo;

USE kalacloud_demo;

CREATE TABLE kalacloud_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    email VARCHAR(255) NOT NULL
);

INSERT INTO kalacloud_users (last_name,first_name,email) 
VALUES ('Chuan ','Jiang','[email protected]'),
       ('Ke','Xie','[email protected]'),
       ('Amei','Song','[email protected]'),
       ('xiaoguo','lv','[email protected]');
select * from kalacloud_users;
# kalacloud.com

MySQL / MariaDB 查询结果保存到 txt 文件

MySQL / MariaDB 内置了一个输出结果到文件的功能,我们只需要在 SELECT 结尾加上 INTO OUTFILE 保存路径 + 文件名

SELECT id, first_name, last_name,email
FROM kalacloud_users
INTO OUTFILE '/home/chuan/kalacloud_users_out_a.txt';

执行命令后,会看到返回结果

Query OK, 4 rows affected (0.008 sec)

INTO OUTFILE的参数及导出到 csv 文件

  • INTO OUTFILE:「导出文件信息」指定导出的目录、文件名及格式
  • FIELDS TERMINATED BY :「字段间分隔符」用于定义字段间的分隔符
  • OPTIONALLY ENCLOSED BY: 「字段包围符」定义包围字段的字符
  • LINES TERMINATED BY: 「行间分隔符」定义每行的分隔符

我们选择导出 *.csv 文件格式,然后分隔符用「 , 」字段包围符用「 " 」换行符为「 \n 」

SELECT id, first_name, last_name,email
FROM kalacloud_users
INTO OUTFILE '/tmp/kalacloud_users_out_b.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';

 

 

我们可以看到这个 csv 文件只包括查询的信息,却没有列名,下面我们来说一下如何加上列名。

在输出结果中加入「列名」增强可读性

我们输出的结果中并没有列名,没有列名的数据易读性很差,在多人协同中很容易出问题。

MySQL 并没有提供直接简单的方法给导出结果加上列名,但好消息是加列名并不复杂。

我们可以使用 UNION ALL 来选择列标题:

SELECT '用户ID', '姓氏', '名字', '电子邮箱'
UNION ALL
SELECT id, first_name, last_name,email
FROM kalacloud_users
INTO OUTFILE '/tmp/kalacloud_users_out_c.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';

返回结果

INTO OUTFILE常见报错

1.ERROR 1290:无法写入

在导出文件时,我们可能会碰到「无法写入」的错误

MySQL:

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

MariaDB:

ERROR 1 (HY000): Can't create/write to file '/home/user/pi/kalacloud_users_out_a.txt' (Errcode: 13 "Permission denied")

这是因为你的 MySQL / MariaDB 配置了--secure-file-priv 限制了导出文件的存放位置。另外,如果你检查secure_file_priv的配置是正确的,仍存在报错Permission denied,此时,你返回到存放导出文件内容的上一个文件夹路径chmod 777 data即可,将最大的授权给到存放文件内容的文件夹

你可以使用以下命令来查看具体配置信息:

show global variables like '%secure_file_priv%';

  • secure_file_priv为 NULL 时,表示不允许导入或导出。
  • secure_file_priv为路径时(如/var/lib/mysql-files/ ),表示只允许在此路径目录中执行。
  • secure_file_priv没有值时,表示可在任意目录的导入导出。
 你可以打开 my.cnf 或 my.ini,添加以下语句,重启 MySQL / MariaDB server 即可
secure_file_priv=''

重启 MySQL / MariaDB:

sudo systemctl restart mysql

2.ERROR 1086 :文件已存在

ERROR 1086 (HY000): File '/tmp/kalacloud_users_out_c.csv' already exists

这个错误是 INTO OUTFILE 指向的目录中含有相同的文件名的文件,请更换文件名保存即可。

 

 

标签:csv,users,INTO,MySQL,file,mysql,txt,kalacloud,name
From: https://www.cnblogs.com/syw20170419/p/16783573.html

相关文章

  • MySQL中dd::columns表结构转table过程以及应用
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。一、MySQL的dd表介绍二、代码跟踪三、知识......
  • 【已解决】Navicat 进入 MySQL 提示错误:Table 'performance_schema.session_variables
    一、问题原因二、试错以为是MySQL服务启动有问题,重新启动了下服务,仍然没有解决。三、解决找到MySQL安装目录,进入bin文件夹下,在bin文件夹下运行命令行窗口,输入以下命令......
  • 这个txt文档每章后面都有个这个特殊字符,如何提取出来删除掉?
    大家好,我是Python进阶者。一、前言前几天在Python白银交流群【Python狗】问了一个Python正则表达式处理的问题,提问截图如下:如果我是他的话,我会直接一步到位,使用notepad......
  • CSV文件\ufeff问题
    今天用C++写TopN问题使用堆排序读取excel转成CSV文件中的数据std::stringstreamss;std::stringtemp;floatdata;std::ifstreamdatafile("filepath/to/csv")getline......
  • MySQL事务篇:ACID原则、事务隔离级别及事务机制原理剖析
    引言众所周知,​​MySQL​​数据库的核心功能就是存储数据,通常是整个业务系统中最重要的一层,可谓是整个系统的“大本营”,因此只要​​MySQL​​存在些许隐患问题,对于整个系统......
  • Mysql日志篇
    l mysql日志(1) 错误日志错误日志是MySQL中最重要的日志之一,它记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任......
  • MYSQL 忘记密码
    1.关闭mysql服务2.使用cd指令切换到mysql的bin目录使用mysqld--console--skip-grant-tables--shared-memory如下图.3.打开一个新的cmd窗口,mysql-uroot-p发......
  • mysql安装以及配置
    mysql安装执行命令aptlist|grep"mysql"查找mysql软件包找到软件包,执行aptinstallmysql-server-8.0/focal-security安装mysql执行mysql进入mysqlType'help;'or......
  • MySQL动态执行字符串
    需求表中存有按天维度字符串表达式字段,需要取出,然后计算出字符串表达式的结果,最后得到一个结果集,并且保留结果例:表达式字段值为value>1,需要先replace掉value为实际......
  • 抽象类与接口的比较?构造方法,构造方法重载,什么是复制构造方法?求N的阶乘?Java环境搭建:J
    大家可分享关于Java微服务相关知识,包括但不限于Java微服务开发经验、架构组成、技术交流、中间件等内容,我们鼓励springcloud架构为基础发散出击,从而达到技术积累的目的,快来......