以前从mysql导出数据总是喜欢用navicat自带的功能,过程很简单,只要按照要求选择导出格式就好。最近遇到要导出几百万的数据,就不敢恭维了。于是就是直接使用select into outfile命令,导出速度还是蛮快的。但是就是不能智能地在第一行输出列名,心想不就是个列名么,应该很简单呀!百度谷歌了半天也没有通用的办法,后来看了一些帖子突然有启发,自己写了一个导出语句,真心觉得很复杂,不过能用就好。在这里mark一下,做事不是那么简单的。

SET @table_name = "user_sample0528";
SET @schema_name = "douyin";
SET @output_name = CONCAT("E:\\\\DouYin\\\\mysql_output\\\\",@table_name,".txt");

SET @cols = NULL;
select GROUP_CONCAT(CONCAT("'",COLUMN_NAME,"'")) INTO @cols
			from INFORMATION_SCHEMA.COLUMNS
			WHERE TABLE_NAME = @table_name AND TABLE_SCHEMA = @schema_name;

SET @sql = CONCAT(" SELECT * FROM (SELECT ", @cols, " UNION ALL SELECT * FROM ", @table_name, ") as r ",
				  " INTO OUTFILE '", @output_name, 
				  "' FIELDS TERMINATED BY '\\t' ");


PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

用的时候替换一下前三个变量就好

table_name:要导出的表名

schema_name:数据库名

output:导出路径,注意windows下要写四个\,因为经过了两层转义,另外还要与my.ini中secure-file-priv的路径保持一致,否则会出现“[Err] 1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement”的错误。

---

附导出性能如下:

文件大小:3,089,881KB

记录数:3796394

时间:2580.626s

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐