2012-03-04 2 views
3

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

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

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

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

+0

Вы можете уточнить или разработать? То, как я читаю то, что вы написали, тривиальное решение заключается в том, чтобы поместить номер версии в определенную таблицу, которая представляет версию для всего БД, иначе сохраните версию в *** все ***, поэтому вы можете получить значение из любой таблицы. – danorton

+0

@ danorton То, что вы упомянули, действительно будет решением моей проблемы, но, как я сказал в OP, мне было интересно, если бы был более элегантный способ добиться сохранения номера версии для всей базы данных, которую я могу выбрать (в отличие от к любому номеру версии, который создает MySQL), сродни [user_version от SQLite's PRAGMA] (http://www.sqlite.org/pragma.html#pragma_user_version). – malexmave

ответ

3

В зависимости от привилегий у вас есть несколько вариантов. Чем выше у вас привилегии, тем более «изящным» решением.

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

Спасибо за ввод. Я предполагаю, что это не будет работать со стандартной базой данных MySQL, которую вы получите в комплекте с вашим пакетом веб-хостинга, потому что a) я не знаю, имеет ли ваш MySQL-пользователь привилегии SUPER и b), пока перезагрузка не будет вы хотели бы использовать скрипт, если у вас нет доступа к файлу параметров). Я прав? – malexmave

+0

Да, если вы измените свой исходный вопрос, я могу изменить свой ответ, чтобы совпасть. – danorton

+0

Я добавил абзац о 'SET GLOBAL' к исходному вопросу. – malexmave

Смежные вопросы