MySQL 检查 table 是否有正确的架构
MySQL check if table has correct schema
我目前正在用 C++ 开发带有 MySQL 数据后端的服务器软件。我正在使用 official MySQL/connector library from Oracle 来处理 MySQL。连接本身正常,我对此没有任何问题。
我的问题是数据库和 table 模式往往每隔一段时间就会发生变化,因为新的 table 和列不断被添加。出于同样的原因,退出列也可能会更改。为了确保我能快速识别过时的服务器软件,我想在数据库更改时添加警告。
我的第一个想法是硬编码数据库(以及 tables 等)的外观,然后检查当前数据库是否与硬编码数据匹配。但我不知道如何实现它。
总而言之,我希望能够检测是否
- 已添加或删除 table
- table 中的一列已更改
- table 中的一列已添加或删除
使用尽可能少的 C++ 代码。而且它应该很容易维护。
将在需要时添加其他信息。
我建议采用以下方法:
1) fork 并执行 mysql
命令行客户端。设置一对管道,到mysql的标准输入和输出。
2) 此时,您应该能够通过标准输入管道将简单命令传送到 mysql 来执行简单命令,并从标准输出管道读取输出。
您需要仔细记录每个 mysql 命令的输出格式,以便您知道何时读完它的输出,然后才能发送下一个命令。
3)作为being的第一条命令,执行:
show tables;
返回的输出将列出数据库中的所有 table。将输出解析为 table 名称列表很简单。然后对每个 table:
执行
show create table <tablename>;
结果输出显示 table 中的所有字段、其键和约束。 table 的几乎所有架构。每 table.
起泡、冲洗、重复
4) 通过这种方式,您可以捕获整个数据库的基本模式,以便进行比较。如有必要,使用相同的方法捕获触发器和其他对象。您可能需要对数据进行一些小改动,并排除一些数据。例如,"show create table" 将包括当前的 AUTO_INCREMENT
值,您可以忽略这些值。
当然,这种通过标准输入和输出驱动 mysql 进程的一般方法有点不稳定。通过一些工作,您可以使用 mysql 的本地客户端库,并执行所有这些命令,并直接捕获它们的结果。这个应该比较靠谱。
我目前正在用 C++ 开发带有 MySQL 数据后端的服务器软件。我正在使用 official MySQL/connector library from Oracle 来处理 MySQL。连接本身正常,我对此没有任何问题。
我的问题是数据库和 table 模式往往每隔一段时间就会发生变化,因为新的 table 和列不断被添加。出于同样的原因,退出列也可能会更改。为了确保我能快速识别过时的服务器软件,我想在数据库更改时添加警告。
我的第一个想法是硬编码数据库(以及 tables 等)的外观,然后检查当前数据库是否与硬编码数据匹配。但我不知道如何实现它。
总而言之,我希望能够检测是否
- 已添加或删除 table
- table 中的一列已更改
- table 中的一列已添加或删除
使用尽可能少的 C++ 代码。而且它应该很容易维护。
将在需要时添加其他信息。
我建议采用以下方法:
1) fork 并执行 mysql
命令行客户端。设置一对管道,到mysql的标准输入和输出。
2) 此时,您应该能够通过标准输入管道将简单命令传送到 mysql 来执行简单命令,并从标准输出管道读取输出。
您需要仔细记录每个 mysql 命令的输出格式,以便您知道何时读完它的输出,然后才能发送下一个命令。
3)作为being的第一条命令,执行:
show tables;
返回的输出将列出数据库中的所有 table。将输出解析为 table 名称列表很简单。然后对每个 table:
执行show create table <tablename>;
结果输出显示 table 中的所有字段、其键和约束。 table 的几乎所有架构。每 table.
起泡、冲洗、重复4) 通过这种方式,您可以捕获整个数据库的基本模式,以便进行比较。如有必要,使用相同的方法捕获触发器和其他对象。您可能需要对数据进行一些小改动,并排除一些数据。例如,"show create table" 将包括当前的 AUTO_INCREMENT
值,您可以忽略这些值。
当然,这种通过标准输入和输出驱动 mysql 进程的一般方法有点不稳定。通过一些工作,您可以使用 mysql 的本地客户端库,并执行所有这些命令,并直接捕获它们的结果。这个应该比较靠谱。