存储有关MySQL数据库的元数据的简便方法

时间:2012-03-04 20:40:45

标签: mysql database metadata

今天早些时候,我asked提供了一种简单的方法来存储您在SQLite中使用的SQL表格布局的版本号,并得到了使用PRAGMA user_version的建议。由于在MySQL中没有Pragma这样的东西,我想知道如何在MySQL中进行此操作(除了使用“DB-Scheme-Version”列创建名为“META”的表)。

重复我在链接问题中所说的内容:我正在寻找一种方法来找出安装了哪个版本的MySQL,但是要保存一个版本的nuber,它告诉我什么版本我使用的MySQL-Scheme,没有通过脚本检查每个表。

我也看过this question,但它只允许我对单个表进行版本控制。整个数据库是否有类似的东西,最好是更容易的东西(因为单独查询每个表格会不会有趣)?提前谢谢。

MySQL的SET GLOBAL可能会有效,但我更喜欢一种解决方案,每次服务器重新启动时都不会重置,并且不需要SUPER权限和/或访问配置文件。简而言之:它应该与您租用小型虚拟主机软件包时获得的标准MySQL数据库一起使用,而不是租用完整服务器时获得的那些,因为您倾向于有更多访问权限。

1 个答案:

答案 0 :(得分:3)

根据您拥有的权限,有几种选择。您拥有的权限越高,解决方案就越“优雅”。

最直接的方法是创建一个存储的函数,该函数需要CREATE ROUTINE权限。 e.g。

mysql> CREATE FUNCTION `mydb`.DB_VERSION() RETURNS VARCHAR(15)
       RETURN '1.2.7.2861';
Query OK, 0 rows affected (0.03 sec)

mysql> SELECT `mydb`.DB_VERSION();
+--------------+
| DB_VERSION() |
+--------------+
| 1.2.7.2861   |
+--------------+
1 row in set (0.06 sec)

如果您的权限限制您只创建表,您可以创建一个简单的表并将版本放在默认值中:

mysql> CREATE TABLE `mydb`.`db_version` (
    `version` varchar(15) not null default '1.2.7.2861');
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW COLUMNS FROM `mydb`.`db_version`;
+---------+-------------+------+-----+------------+-------+
| Field   | Type        | Null | Key | Default    | Extra |
+---------+-------------+------+-----+------------+-------+
| version | varchar(15) | NO   |     | 1.2.7.2861 |       |
+---------+-------------+------+-----+------------+-------+
1 row in set (0.00 sec)