Простой способ хранения метаданных о MySQL-Database - PullRequest
3 голосов
/ 05 марта 2012

Ранее сегодня я попросил предоставить простой способ сохранить номер версии для макета таблицы SQL, который вы используете в SQLite, и получил предложение использовать PRAGMA user_version.Поскольку в MySQL нет такой вещи, как Pragma, мне было интересно, как вы поступите с этим в MySQL (за исключением создания таблицы с именем «META» со столбцом «DB-Scheme-Version»).

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

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

MySQL SET GLOBAL, вероятно, будет работать, но я предпочитаю решение, которое не сбрасывает себя каждый раз при перезагрузке сервера и не требует SUPER привилегий и / или доступа к файлу конфигурации дляиспользовать.Короче говоря: он должен работать со стандартной базой данных MySQL, которую вы получаете, когда арендуете небольшой пакет веб-хостинга, а не тот, который вы получаете, если арендуете полный сервер, поскольку у вас, как правило, больше доступа к ним.

1 Ответ

3 голосов
/ 05 марта 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_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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...