本文譯自Flyway官方文檔,原文地址https://flywaydb.org/getstarted/howsql
當你最開始將FlyWay指向一個空數據庫時。數據庫
它會試着去查找schema歷史表,若是此時數據庫是空的,則FlyWAY會本身建立一張歷史表 。
你如今就有了個僅包含空表flyway_schema_history(默認)的數據庫
spa
這張表將會追蹤數據庫的狀態,blog
隨後flyway會當即掃描應用的文件系統或類路徑(classpath)以用於遷移,Sql或Java文件均可以支持遷移。排序
遷移會按照版本號進行排序並依次執行:ip
隨着每次遷移被執行,schema_history歷史表會依此更新記錄ci
flyway_schema_history文檔
installed_rankget |
versionit |
description |
type |
Script |
checksum |
installed_by |
installed_on |
execution_time |
success |
1 |
1 |
Initial Setup |
SQL |
V1__Initial_Setup.sql |
1996767037 |
axel |
2016-02-04 22:23:00.0 |
546 |
true |
2 |
2 |
First Changes |
SQL |
V2__First_Changes.sql |
1279644856 |
axel |
2016-02-06 09:18:00.0 |
127 |
true |
如今,元數據與初始狀態都已就位,能夠討論下遷移到新版本了
Flyway會再次掃描應用的文件系統和類路徑,遷移依據歷史表檢查,若是版本號低於或等於當前版本號,則忽略遷移操做。
剩下的遷移是增量遷移(pending migrations),準備就緒,但未執行
它們會按照版本號排序並依次執行:
schema_history歷史表會依此更新記錄:
flyway_schema_history
installed_rank |
version |
Description |
type |
Script |
checksum |
installed_by |
installed_on |
execution_time |
success |
1 |
1 |
Initial Setup |
SQL |
V1__Initial_Setup.sql |
1996767037 |
axel |
2016-02-04 22:23:00.0 |
546 |
true |
2 |
2 |
First Changes |
SQL |
V2__First_Changes.sql |
1279644856 |
axel |
2016-02-06 09:18:00.0 |
127 |
true |
3 |
2.1 |
Refactoring |
JDBC |
V2_1__Refactoring |
axel |
2016-02-10 17:45:05.4 |
251 |
true |
That’s it! 每次數據庫須要改進時,不管是DDL或DML,只要建立一個版本號高於目前版本的遷移就行,下次Flyway啓動時,它會依次進行數據庫的升級操做。
DDL: Data Definition Language 數據庫定義語言
DML: Data Manipulation Language 數據庫操做語言