1)冪等遷移是一種可以運行多次的遷移,但仍然具有與僅運行一次相同的效果。爲了達到這個目的,你不需要每次修改數據庫表時都要寫表創建代碼。試圖做到這一點也將變得不可能很快保持。
基本上,在您的遷移腳本中編寫語句時,您需要知道第一次運行此語句之前數據庫的狀態。現在,請考慮必須對語句進行哪些修改,以確保即使它之前已經運行過,它也可以無誤地運行。
例如:如果你的數據庫是狀態A,並且在運行遷移x到它到達B:
M(A, x) -> B
然後,你需要寫X,使數據庫狀態還是B還送如果x然再次:
M(B, x) -> B
這將允許您運行相同的遷移腳本不止一次(得心應手例如,如果在腳本中的語句中的一個失敗,但以前的成功)。
2)接下來,設置outOfder = true將允許flyway運行尚未運行的任何遷移,即使遷移比最新運行的遷移早。因此,如果您有三次遷移,x,y和z(按此順序),並且x和z針對數據庫運行,然後未設置outOfOrder,則一旦可用,flyway就不會運行y,因爲z已經運行。但是,如果將標誌設置爲true,y現在基本上會在z之後運行。
現在,如果你設置outOfOrder爲true,你需要意識到這一點可能性,你的數據庫的起始狀態之前,在數據庫中,現在有兩個不同的值:
其中A是初始狀態:
M(A, x) -> B
M(B, y) -> C
M(C, z) -> E
(Taking the state from A -> B -> C -> E)
M(A, x) -> B
M(B, z) -> D
M(D, y) -> E
(Taking the state from A -> B -> D -> E)
所以前y爲然,狀態可以是B或d和前z爲RAN中,狀態可以是B或C.由此,需要被寫入所以遷移腳本ÿ除了是冪等的,它還可以用於它的起始狀態,並允許z在它跑完之後仍然起作用(z必須正確運行f或狀態B和C兩者)。