Присоединение простых метаданных к базе данных MySQL - PullRequest
2 голосов
/ 20 августа 2010

Есть ли способ присоединить часть метаданных к базе данных MySQL? Я пытаюсь написать код для автоматического обновления схемы базы данных, когда этого требует обновление кода. Это требует хранения единственного целочисленного значения - версии схемы. Конечно, я мог бы создать для него целую таблицу, но для простого числа это кажется излишним.

Ответы [ 2 ]

2 голосов
/ 20 августа 2010

Вы можете использовать комментарии таблицы для хранения версии:

ALTER TABLE table1 COMMENT = '1.4';

Вам понадобится регулярное выражение, чтобы получить комментарий от этого:

SHOW CREATE TABLE table1;
/COMMENT='(.*)'/
1 голос
/ 06 марта 2012

Чтобы ответить на вопрос с заголовком, то есть для метаданных всей базы данных, а не отдельных таблиц, есть несколько вариантов, в зависимости от имеющихся у вас привилегий.

Самый прямой путь -создать хранимую функцию, для которой требуется привилегия 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)
...