2011-11-14 14 views
2

我基本上從一個WordPress數據庫的一些數據的MySQL轉儲。整個轉儲大約有20MB,大概有500個查詢,所以不需要永久加載,但它也不是非常快。我需要在我的其他應用程序中使用該數據庫,爲此,我必須更改模式,即重命名錶,列,刪除某些列,刪除表,創建新表並將數據導入它們等等。我應該如何編寫用於更改數據庫模式的大型SQL腳本?

實際上,我要改變幾乎每一個列。問題是,我應該如何編寫這樣的腳本?

我希望能夠有一個腳本,我可以執行最近的轉儲,將數據庫轉換爲所需的形式。這意味着如果我開始輸入ALTER TABLE查詢然後執行它們,每當我想測試整個腳本時,我將不得不重新導入數據庫,這對我來說似乎不是很有效。有沒有更好的方法來做到這一點?

我可以以某種方式運行一堆查詢,看看他們做了什麼,然後點擊一個按鈕將數據庫移回原始狀態?

回答

3

我不是100%肯定我明白你的問題,但我想你可能會尋找

CREATE TABLE new_table LIKE other_database.old_table; 

這將讓你保持舊數據庫不變的「經典」版本。您的ALTER TABLE語句將針對新表執行。

除了能夠將整個腳本作爲單個事務運行以外,對於這些模式更改還沒有簡單的亞毫秒UNDO。在說了這麼多話之後,如果一位開發人員來找我說「我會經常改變幾乎每一個列」,那麼我會把它當作一面巨大的紅旗,在風中滾滾。

0

如果修改底層數據集似乎對您無效,您可以構建抽象層。表的主要抽象機制是視圖。您可能可以構建一組視圖,通過導入的數據庫對應用程序需要的數據集的形狀進行投影。這種方法幾乎可以保證在運行時比執行基本數據集更差。你還需要讓自己意識到在MySQL中創建和使用視圖的限制。沒有關於你的具體情況的具體情況,很難給出具體的答案。

也就是說,對於alter table語句的大腳本沒有任何固有的無效。

可我不知跑了一堆的查詢,看看他們做了什麼,然後 打一個按鈕,將數據庫恢復到原來的狀態?

不通過交易,我不相信。你可以簡單地重新恢復數據庫。

0

你試圖實現的東西將會更好地描述爲一個ETL任務,而不是一堆「ALTER TABLES」。不要改變舊模式 - 分別創建新模式,然後將數據導入到模板中,隨時更改格式,如下所示:

INSERT INTO NEWTABLE (Fullname) 
SELECT CONCAT(Name, Surname) AS FullName FROM OLDTABLE 
相關問題