2012-07-21 48 views
3

mysqldump創建一個包含按字母順序列出的表(和視圖)的轉儲。當有表,這是不是很方便之間的外鍵關係,但是,這個問題很容易通過運行解決:從mysqldump備份中執行相互依賴的視圖

SET FOREIGN_KEY_CHECKS=0; 

我有一種情況,即認爲,vwapple,取決於視圖,vworange,說。使用mysqldump,vwapple會在vworange之前列出並執行,這是有問題的,因爲我們會看到「view vworange does not exist」錯誤消息。

這種情況如何解決?視圖是否具有與表格類似的解決方案?或者爲了解決這個問題,讓每個視圖獨立更好?


我正在使用python腳本恢復數據庫。每個視圖和表都在其單獨的.sql文件中,因爲我想獨立地控制每個數據庫對象。

回答

4

當轉儲整個數據庫時,最新版本的mysqldump以這種方式解決問題:對於數據庫中的每個視圖,它們首先創建一個具有相同結構的空表,然後創建視圖,在創建視圖之前刪除每個佔位符表視圖。看起來用視圖替換表格不會損害依賴它的視圖。

我知道這一點,因爲這種方法有另一個flaw,它咬了我:在圖的行可能包含比表中的行更多的數據,因此一些佔位符的表不能創建,導致一些轉儲是無需人工干預不可恢復。出於這個原因,視圖的拓撲排序將是可取的,儘管它可能需要一些工作。