MySQL检查表是否具有正确的模式

时间:2016-06-18 00:55:11

标签: c++ mysql database-schema

我目前正在用C ++开发带有MySQL数据后端的服务器软件。我正在使用official MySQL/connector library from Oracle来处理MySQL。连接本身正在工作,我对此没有任何问题 我的问题是数据库和表模式往往会偶尔改变,因为新的表和列不断添加。出于同样的原因,也可以更改退出列。为了确保我能够快速识别过时的服务器软件,我想在数据库发生变化时添加警告 我的第一个想法是硬编码数据库(和表等)的外观,然后检查当前数据库是否与硬编码数据匹配。但我不知道如何实现这一点。

总之,我希望能够检测是否

  • 已添加或删除表格
  • 表格中的列已被更改
  • 已添加或删除表格中的列

尽可能少的C ++代码。它也应该很容易维护。

必要时会添加其他信息。

1 个答案:

答案 0 :(得分:2)

我建议采用以下方法:

1)fork并执行mysql命令行客户端。设置一对管道,以mysql的标准输入和输出。

2)此时,您应该能够通过标准输入管道将它们传递给mysql来执行简单命令,并从标准输出管道读取输出。

您需要仔细记录每个mysql命令的输出格式,以便您知道何时读完输出,然后发送下一个命令。

3)作为存在的第一顺序,执行:

show tables;

返回的输出将列出数据库中的所有表。将输出解析为表名列表是很简单的。然后对每个表执行:

show create table <tablename>;

结果输出显示表中的所有字段,其键和约束。几乎所有这个表的架构。为每张桌子泡沫,冲洗,重复。

4)以这种方式,您可以捕获整个数据库的基本模式,以进行比较。如有必要,使用相同的方法捕获触发器和其他对象。您可能需要对数据进行一些小的按摩,并排除几位。例如,“show create table”将包含您可以忽略的当前AUTO_INCREMENT值。

这种通过其标准输入和输出驱动mysql进程的一般方法当然有点不稳定。通过一些工作,您可以使用mysql的本机客户端库,并直接执行所有这些命令并捕获其结果。这应该更可靠。