代码之家  ›  专栏  ›  技术社区  ›  zildjohn01

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

  •  2
  • zildjohn01  · 技术社区  · 14 年前

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

    2 回复  |  直到 14 年前
        1
  •  2
  •   Ian Wetherbee    14 年前

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

    ALTER TABLE table1 COMMENT = '1.4';
    

    您必须通过regex才能从中获得评论:

    SHOW CREATE TABLE table1;
    /COMMENT='(.*)'/
    
        2
  •  1
  •   danorton    13 年前

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

    最直接的路由是创建一个存储函数,它需要 CREATE ROUTINE 特权。例如

    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)