2016-05-10 58 views
0

假設需要將2列添加到表中並修改1.從純設計視圖中,我需要創建3個具有3個不同先決條件的變更集:存在2列,列1具有錯誤類型。有沒有辦法將liquibase中的變更集合起來?

這是明確的設計方法,但它導致3個單獨的更改表,這可能是非常昂貴的。例如,當添加或修改列時,MySql會複製或重建整個表。但它允許將幾個修改後的語句合併爲一個。但是一個變化的變化集合需要結合不可能的先決條件 - 我應該在其中一個是真的還是全部時進行大的改動?

那麼有沒有辦法從幾個先決條件中看到並僅從成功的前置條件構建改變表?

+2

關於預設條件的說明:您通常應該僅僅依靠Liquibase的更改日誌跟蹤來了解是否已應用changeSet。先決條件有時是有用的,但是如果你完全依靠它們來確定應該執行什麼,那麼通常是一種「糟糕的代碼味道」,數據庫變化沒有被很好地控制。只要確保你使用前提條件來隔離檢查就可以恢復數據庫。 –

回答

0

對於MySQL,如果您有一個帶有多個嵌套列的addColumn標記,它將生成一個ALTER TABLE語句,該語句一次添加所有列。

您可以在「和」和「或」塊中嵌套多個前置條件,因此您可以有一個changeSet檢查column1是否丟失,column2是否丟失,如果兩者都是,則運行addColumns 。然後下一個changeSet可以檢查是否缺少column1,下一個是缺少的column2,下一個是否爲錯誤的數據類型。

您會希望onFail屬性的前提條件設置爲「MARK_RAN」,以便它們僅在運行時標記,並且不會在每次更新時不斷重新評估。

+0

來到相同的方法。 – Cherry

相關問題