将简单元数据附加到MySQL数据库

时间:2010-08-20 16:17:53

标签: mysql schema metadata

有没有办法将一段元数据附加到MySQL数据库?我正在尝试编写代码,以便在代码升级需要时自动更新数据库模式。这需要存储单个整数值 - 模式版本。我当然可以为它创建一个完整的表格,但这对于一个简单的数字来说似乎有些过分。

2 个答案:

答案 0 :(得分:2)

您可以使用表格注释来存储版本:

ALTER TABLE table1 COMMENT = '1.4';

您必须使用正则表达式来获取此评论:

SHOW CREATE TABLE table1;
/COMMENT='(.*)'/

答案 1 :(得分:1)

要回答标题为问题的问题,即整个数据库的元数据,而不是单个表,根据您拥有的权限,有几种选择。

最直接的方法是创建一个存储的函数,该函数需要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_metadata` (
    `version` varchar(15) not null default '1.2.7.2861');
Query OK, 0 rows affected (0.00 sec)

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