前言
??????一家人除了我都去旅游了,我這項請假,請不動啊。既然在家了,閑著也是閑著,就復盤下最近的工作,今天就復盤表結構管理吧,隨系統啟動的,不是flyway,而是另一個liquibase,個人覺得它比fly更優秀。
現在當家了,才知道當小弟的快樂,現在比當核心的時候更累了,不過這也正常。但是實際上米并沒有拿多,這該死的年齡,懷戀啊我們的青春啊。回想這一路走來,因為性格問題,被壓制太久了,其實有些時候并不是你能力不夠,而是上面不愿意讓你發展…
一、Liquibase?
1.Liquibase是什么
- Liquibase 是一個開源的數據庫版本控制工具,主要用于自動管理數據庫結構(Schema)變更,確保數據庫在不同環境(開發、測試、生產)中的結構一致性。
- Liquibase 是數據庫的 Git。就像你用 Git 來管理代碼版本一樣,Liquibase 用來管理數據庫結構的變更記錄。
2.它能做什么
-
自動執行數據庫遷移腳本(建表、加字段、加索引等)
-
將變更記錄存入數據庫,確保不重復執行
-
支持回滾數據庫操作
-
適用于 CI/CD 自動部署流程
-
多種格式支持:XML、YAML、JSON、SQL
3.基本原理
-
每次你要對數據庫做結構修改,就寫一個“changelog”文件(變更日志)。
-
Liquibase 執行后會在數據庫中建一個表叫 DATABASECHANGELOG,記錄每次執行過的變更。
-
之后每次運行時,Liquibase 會比對哪些變更沒有執行過,只執行新的部分。
4.它適合什么場景
-
使用微服務、多個環境(本地、測試、線上)的團隊
-
不希望 DBA 手工發 SQL 的項目
-
想把數據庫腳本版本控制起來的工程化團隊
5.它與 Flyway 有什么區別?
??????Liquibase 和 Flyway 是兩大主流的 數據庫遷移工具,它們都能自動執行數據庫變更,但各有特點。下面是它們之間的核心區別對比:
功能 | Liquibase | Flyway |
---|---|---|
支持多種格式 | YAML / XML / JSON / SQL | 僅支持 SQL 和 Java |
可聲明式(非純 SQL) | 是 | 否(主要是 SQL) |
腳本命名規則靈活 | changelog-xxx.yaml | 必須 V1__init.sql |
順序控制方式 | id 字段控制順序 | 文件名控制順序 |
支持數據庫種類 | 更廣泛(幾十種) | 主流數據庫為主 |
數據庫記錄執行歷史|DATABASECHANGELOG 表|flyway_schema_history 表| | ||
支持回滾 | 原生支持 | 手動寫 rollback 腳本 |
自動執行遷移 | 是 | 是 |
Spring Boot 默認集成工具 | 非默認 | 默認集成 |
結論匯總:
- Liquibase 更靈活,支持聲明式寫法,不用寫原生 SQL。Flyway 更適合 DBA 寫 SQL。
- Flyway 嚴格依賴文件名排序執行腳本,而 Liquibase 通過 id + author 明確指定每條變更。
- 兩者都支持 MySQL、PostgreSQL、Oracle、SQL Server 等主流數據庫。
- Liquibase 原生支持 rollback,而 Flyway 不支持自動回滾,需人工寫反向腳本。
- Spring Boot 默認集成 Flyway(spring-boot-starter-data-jpa 會自動檢測 Flyway 腳本),Liquibase 需要顯式加依賴。
二、使用步驟
1.引入庫
<dependency><groupId>org.liquibase</groupId><artifactId>liquibase-core</artifactId>
</dependency>
2.建目錄
??????一般是在resources下建db目錄,下面方master.xml,建mysql目錄。當然也可以在resources下建其他名稱的目錄,在xml文件里指定的目錄對得上就行。
master.xml
<databaseChangeLogxmlns="http://www.liquibase.org/xml/ns/dbchangelog"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangeloghttp://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"><!-- <include file="db/mysql/changelog.sql" relativeToChangelogFile="false"/>--><includeAll path="db/mysql"/></databaseChangeLog>
mysql是用來存sql的
這里在mysql目錄下就建一個文件changelog.sql,我是不太愿意一個人建一個文件的,都在一個文件里寫好提交的id注釋就行了。
--liquibase formatted sql-- changeset zw:202506291113
ALTER TABLE enterprise_matters CHANGE is_topic is_topic int(11) NULL COMMENT '是否主題,0否,1是' AFTER applicable_region;
-- comment:修改字段排序
??????一直在這個文件下以-- changeset zw:提交id,-- comment:注釋 結尾就行。
注意,若果是在原始語句上修改,注意提交的id要往后變,當然一般情況是不支持這樣搞的,還是建議再次寫一個語句
總結
- 就是這么簡單,sql就管理起來了,個人覺得特別適合敏捷開發
- 領頭、領銜確實難點,需要考慮的事情多,最最重要的的是還要技術支撐,不然頂不住啊
就寫到這里,加油,uping!