mysql - 如何从按公共列排序的数据库中导出所有表?
问题描述
我想将每个表从数据库导出到一个单独的 csv 文件,该文件由一个 commom 列排序到所有表。我正在使用 MySql、phpMyAdmin 和 Windows 10
我是 MySql 的新手,在 Stackoverflow 上搜索我可以得到这个将一个表导出到 csv 文件的代码,这正是我想要的:
SELECT * INTO OUTFILE 'c://path/name_of_table.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY ''
LINES TERMINATED BY '\n'
FROM `name_of_table` ORDER BY name_of_column;
我可以在上面的查询中使用表名作为变量来遍历特定数据库中的所有表吗?
就像是:
FOREACH my_table IN my_database
SELECT * INTO OUTFILE 'c://path/' .my_table.table_name. '.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY ''
LINES TERMINATED BY '\n'
FROM `my_table.table_name` ORDER BY name_of_column;
END FOREACH;
任何其他方法也很受欢迎
谢谢!
解决方案
你已经完成了一半。
一种解决方案是使用带有游标的存储过程来获取表名和一些动态 SQL 来生成 SELECT INTO OUTFILE 语句。
像这样的东西应该工作。
DELIMITER //
DROP PROCEDURE IF EXISTS db_export_csv //
CREATE PROCEDURE db_export_csv(_path VARCHAR(255), _sname VARCHAR(64))
BEGIN
DECLARE tname VARCHAR(64);
DECLARE done BOOLEAN DEFAULT FALSE;
DECLARE cur CURSOR FOR
SELECT `table_name`
FROM `information_schema`.`tables`
WHERE `table_schema` = _sname
AND `table_type` = 'BASE TABLE';
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE;
OPEN cur;
myloop: LOOP
FETCH cur INTO tname;
IF done THEN
LEAVE myloop;
END IF;
SET @sql = CONCAT("SELECT * INTO OUTFILE \'" , _path , '' , tname , '_' , CURRENT_DATE , ".csv\' ",
"FIELDS TERMINATED BY ',' ",
"OPTIONALLY ENCLOSED BY '''' ",
"LINES TERMINATED BY '\n' ",
"FROM `" , _sname , "`.`" , tname , "` ORDER BY `yrcolname` ASC");
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
END //
DELIMITER ;
CALL db_export_csv('/var/lib/mysql-files/', 'test');
显然,我已经在 Linux 上对其进行了测试,因此您可以将自己的可写路径放入(允许设置 @@global.secure_file_priv)并且您应该更改yrcolname
为适当的值。
推荐阅读
- c# - 使用 Ajax.BeginForm 调用 HttpPost 不起作用
- android - 在 android build.gradle 中对两个不同的 flavorDimensions 使用相同的产品风味
- python - 有没有办法编辑按钮属性?Discord.py,不和谐组件
- amazon-web-services - 我们可以使用 AWS Lambda 编写 C# 控制台应用程序和 ASP.NET Core MVC Web 应用程序吗
- kotlin - Mockk 模拟 Java“枚举”单例
- github-actions - 如何在 GitHub 操作中屏蔽多行值?
- node.js - 如何使用 package.json 中定义的代理 url 作为 axios 代理?
- vue.js - Vue 2 + TinyMCE 单页混乱
- csv - 当我尝试在不选择位置的情况下导出查询时,为什么 bigquery 会自动下载我的查询?
- javascript - JS 动画循环过渡