gpt4 book ai didi

MySQL:从 SQL 查询转储数据库

转载 作者:行者123 更新时间:2023-11-29 05:45:56 26 4
gpt4 key购买 nike

我正在编写一个测试框架,我需要在其中捕获 MySQL 数据库状态(表结构、内容等)。

我需要这个来检查在某些操作后状态没有改变。 (自动增量值可能被允许改变,但我想我能处理这个。)

转储最好采用人类可读的格式(最好是 SQL 代码,如 mysqldump 所做的那样)。

我希望将我的测试框架限制为仅使用 MySQL 连接。要捕获状态,它应该调用 mysqldump 或访问文件系统(例如复制 *.frm 文件或执行 SELECT INTO 文件,尽管管道很好)。

因为这只是测试代码,所以我不关心性能。不过,我确实需要可靠的行为。

实现我需要的功能的最佳方式是什么?

我想我的代码应该基于一些现有的开源备份工具......哪个是最好的?

更新:我没有指定我编写此代码所用的语言(不,那不是 PHP),因为我认为我无法按原样重用代码 — 我的情况是相当特殊(出于实际目的,让我们假设 MySQL C API)。代码将在 Linux 上运行。

最佳答案

鉴于您的要求,我认为您只剩下(伪代码+ SQL)

tables = mysql_fetch "SHOW TABLES"
foreach table in tables
create = mysql_fetch "SHOW CREATE TABLE table"
print create
rows = mysql_fetch "SELECT * FROM table"
foreach row in rows
// or could use VALUES (v1, v2, ...), (v1, v2, ...), .... syntax (maybe preferable for smaller tables)
insert = "INSERT (fiedl1, field2, field2, etc) VALUES (value1, value2, value3, etc)"
print insert

基本上,获取所有表的列表,然后遍历每个表并为每一行手动生成 INSERT 语句(大多数 api 有一个简单的方法来获取列名列表,否则你可以回退到调用 DESC TABLE)。

SHOW CREATE TABLE 已为您完成,但我相当确定没有任何类似的事情可以执行 SHOW INSERT ROWS

当然,除了打印转储,您还可以用它做任何您想做的事。

关于MySQL:从 SQL 查询转储数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2024683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com