2012-03-04 10 views
3

今日、私はaskedを使って、SQLiteで使用しているSQLテーブルレイアウトのバージョン番号を簡単に保存し、PRAGMA user_versionを使用するように提案しました。 MySQLにPragmaというようなことはないので、私はあなたがこれをMySQLでどうやってやるのか疑問に思っていました( "META"という名前のテーブルを "DB Scheme-Version"という列にすることを除いて)。MySQLデータベースに関するメタデータを保存する簡単な方法

はありませんインストールされているMySQLのバージョンを調べる方法を探していますが、MySQLのバージョンがわかっているバージョンナーバーを保存する方法を探しています。スキーム私は、スクリプトを介してすべてのテーブルをチェックすることなく、使用しています。

私はthis questionも見ましたが、1つのテーブルのみをバージョンアップできます。データベース全体に対して、類似した、またはできれば簡単なものがありますか?(1つのテーブルごとに別々にクエリを実行するのは面白くないでしょう)前もって感謝します。

MySQLのSET GLOBALはおそらく動作しますが、サーバがリブートするたびにリセットされず、不要な解決策が好まれますSUPER使用する設定ファイルへの特権および/またはアクセス権。要約すると、標準のMySQLデータベースで動作するはずです。小さなWebホスティングパッケージを借りたときに取得するものです。フルサーバを借りれば得られるものではなく、より多くのアクセス権を持つ傾向があります。

+0

あなたは明確か手の込んだことはできますか?私があなたが書いたことを読んでいるところでは、簡単な解決策は、DB全体のバージョンを表す特定のテーブルにバージョン番号を入れ、バージョンを***にすべて保存することです。どのテーブルからでも値を取得できます。 – danorton

+0

@danortonあなたが言いたいのは私の問題の解決策になるだろうが、私がOPで言ったように、選択できるデータベース全体のバージョン番号を保存するよりエレガントな方法があるのだろうかと思っていたSQLiteのPRAGMA user_version](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

入力いただきありがとうございます。 a)あなたのMySQLユーザがSUPER権限を持っているかどうか、b)再起動が何もないまで永続性があるかどうかわからないので、これは標準のMySQLデータベースではうまくいきませんオプションファイルにアクセスできない場合は、スクリプトをベースにしたいでしょう)。私は正しいですか? – malexmave

+0

はい、元の質問を変更した場合は、一致するように自分の応答を変更することができます。 – danorton

+0

元の質問に 'SET GLOBAL'に関する段落を追加しました。 – malexmave

関連する問題