2017-03-03 44 views
0

我有一個使用本地數據庫的程序。用戶具有不同版本的程序,而該程序又具有更新其數據庫的命令。所以現在我有這個巨大的代碼看起來像塊:我可以驗證一個mysql模式而不需要逐行執行嗎

try 
{ 
    using (var cmd = new MySqlCommand("ALTER TABLE `SomeTable` ADD COLUMN `SomeColumn` double NULL ;", con)) 
       { 
        cmd.CommandType = CommandType.Text; 
        cmd.ExecuteNonQuery(); 
       } 
} 

我有上百個,這些是添加或刪除列,添加表,創建索引等是否有這樣做的更有效的方式,像一次驗證整個模式,還是我堅持維護它? 我打算將其更改爲一個字符串數組,但只是運行數組中的所有字符串,但我不知道是否有更好的方法來執行此操作。

回答

1

您可以從數據庫information_schema中一次查詢數據庫中的整個模式。因此,您可以使用一個查詢驗證所有列設置。您可以解析結果並檢查需要哪些更新。 (數據庫information_schema是特定的MySQL):

SELECT * FROM `information_schema`.`COLUMNS` WHERE TABLE_SCHEMA = "<your_database>" 

對於未來保持輕鬆的創建一個表像數據庫中dbversion。該表將數據庫版本保存爲任意字符串(例如「1.1.2」)和日期,在此數據庫上執行更新時。因此,您可以查詢數據庫的模式版本,並在必要時進行更新。

僅當成功執行所有更新時才更新此數據庫。另一種方法是在更新之前插入一個數據集作爲更新過程中的信號量。

E.g.版本=「1.1.3更新」,並在更新成功後刪除此添加的行並添加版本=「1.1.3」。

CREATE TABLE `dbversion` (
    `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `version` varchar(50) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

ALTER TABLE `dbversion` 
    ADD PRIMARY KEY (`date`,`version`), 
    ADD KEY `date` (`date`); 

獲取與dbversion最新的條目:

SELECT * FROM `dbversion` ORDER BY `date` DESC LIMIT 1; 
相關問題