2012-03-04 63 views
3

今天早些時候,我用asked爲SQLite中使用的SQL表格佈局存儲版本號的簡單方法,並得到了使用PRAGMA user_version的建議。由於MySQL中沒有這樣的東西,所以我想知道如何在MySQL中執行此操作(除了使用「DB-Scheme-Version」列創建名爲「META」的表格)。簡單的方法來存儲關於MySQL數據庫的元數據

只是重複一下我在鏈接問題中所說的:我是而不是尋找一種方法來找出安裝了哪個版本的MySQL,但是保存一個版本的nuber,告訴我什麼版本的MySQL-我正在使用的計劃,不通過腳本檢查每個表。

我也看到了this question,但它只允許我對單個表進行版本化。對於整個數據庫有沒有類似的,或者最好更容易些(因爲單獨查詢每個表是沒有意思的)?提前致謝。

MySQL的SET GLOBAL可能會工作,但我更喜歡一種解決方案,每次重新啓動服務器時都不會自行重置,並且不需要SUPER要使用的配置文件的權限和/或訪問權限。簡而言之:它應該與您租用小型虛擬主機軟件包時獲得的標準MySQL數據庫一起使用,而不是租用完整服務器時獲得的標準MySQL數據庫,因爲您傾向於擁有更多訪問權限。

+0

你能澄清或詳細點嗎?我正在閱讀你寫的東西,一個簡單的解決方案是將版本號放在一個特定的表中,該表代表整個數據庫的版本,否則將版本存儲在***全部***中,所以你可以從任何表格中獲得價值。 – danorton 2012-03-05 06:38:59

+0

@danorton你提到的確實是解決我的問題的方法,但正如我在OP中所說的那樣,我想知道是否有一種更優雅的方法可以爲整個數據庫保存一個我可以選擇的版本號(相反到MySQL正在創建的任何版本號),類似於[SQLite的PRAGMA user_version](http://www.sqlite.org/pragma.html#pragma_user_version)。 – malexmave 2012-03-05 08:16:33

回答

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數據庫一起工作,因爲您將綁定到您的webhosting包,因爲a)我不知道您的MySQL用戶是否擁有「SUPER」特權和b)持久性,直到重新引導爲止如果您無權訪問選項文件,您將希望將腳本創建爲基礎)。我對麼? – malexmave 2012-03-05 08:21:00

+0

是的,如果您修改您的原始問題,我可以修改我的答案以符合。 – danorton 2012-03-05 15:39:07

+0

我在原始問題中添加了一個關於'SET GLOBAL'的段落。 – malexmave 2012-03-05 15:56:43

相關問題