[心得] 如何利用liquibase進行資料庫版本控制 - 基礎觀念
前言 -
會寫這篇除了是要記錄一下使用的過程之外,也是發現到網路上找來的教學幾乎都是跟其它環境做結合
比較沒有單純利用command進行的流程。也沒有整體觀念的介紹,所以將我所理解的整理分享給大家。
因我對於Git版本控制比較熟悉,這當中會借用一點Git的觀念來做解釋 :)
liquibase - 介紹與觀念
liquibase是一套opensource的版本控制系統,其背後其實就是透過設定不同版本的changeLogFile,在執行時執行對應的SQL語法,來達到所謂的版本控制。
而在目前最新版的liquibase中,可以使用的ChageLog格式一共有XML、YAML、JSON、SQL四種格式。 而我文章中一律都是用SQL格式來做說明唷
refer : databasechangelog
在剛剛有提到liquibase是利用不同版本的changeLogFile來做版本控制,如果不太清楚的話。
以下就用兩個例子來做說明
TestDbChangeLogVer1.0.sql
--liquibase formatted sql
--changeset author:Jaja
CREATE
TABLE Admin
(
ID INTEGER NOT NULL IDENTITY NOT FOR REPLICATION ,
UserID NVARCHAR (50) NOT NULL ,
UserPassword NVARCHAR (50) NOT NULL ,
FK_UserRole INTEGER NOT NULL
)
ON "default"
;
--rollback DROP TABLE Managements
TestDbChangeLogVer1.1.sql
--liquibase formatted sql
--changeset author:Jaja
CREATE
TABLE Account
(
ID INTEGER NOT NULL IDENTITY NOT FOR REPLICATION ,
UserID NVARCHAR (50) NOT NULL ,
UserPassword NVARCHAR (50) NOT NULL )
ON "default"
;
--rollback DROP TABLE Account
這裡面你會注意到,在SQL格式中的changelog ,其實是利用註解的方式來讓liquibase知道執行的位置。詳細的說明就再請自行參閱囉!如果需要解釋再請回覆給我
回到正題來,我們分別建立了兩個.sql檔做為我們第一版的資料庫內容與第二版的資料庫內容。那我們實際使用是怎樣進行的呢?
可以先參考這張圖

其實liquibase在做版本控制實際上只有簡單幾步
1.建立本次版本ChangeLog的相關內容 (以我們文中提到的,就是TestDbChangeLogVer1.0.sql 與 1.1兩個檔案)
2.建立完成後執行更新異動。在這一步中,就會將ChangeLog裡面所寫的內容,更新到資料庫。可能會建立資料表、修改資料表或是新增測試資料之類的 。 常用的語法是liquibase --changeLogFile {ChangeLogFileName} update
在這裡我們可以想像成Git版本控制中的commit . 而每一次的commit都會在資料庫上面產生對應的動作
3.rollback回指定的版本,常用的語法是liquibase --changeLogFile TestDbChangeLogVer1.0.sql rollback {tagName} 或是 liquibase --changeLogFile TestDbChangeLogVer1.0.sql rollbackCount{要跳轉幾個版本}
rollback這個部分會詳細的在下一篇實際操作中介紹。 基本上如果各位有注意到的話,rollback這一段我們其實也有寫在ChangeLog裡面。而裡面的語法就會在你執行rollback指令時,在資料庫上執行
其實rollback跟Git當中的reset概念是一樣的,只是我們rollback的時候也一樣會在資料庫上面產生對應的「還原」動作
[心得] 如何利用liquibase進行資料庫版本控制 - 基礎觀念的更多相关文章
- [心得] 如何利用liquibase進行資料庫版本控制 - 實際練習
透過上一篇的基本觀念介紹,希望大家應該有一點點感覺了! 這篇我們就來做個簡單的版本演練,加深印象吧! 我使用的環境如下 System : Windows 7 Database : SQL Server ...
- Active Record: 資料庫遷移(Migration) (转)
Active Record: 資料庫遷移(Migration) Programming today is a race between software engineers striving to b ...
- Delphi APP 開發入門(八)SQLite資料庫
Delphi APP 開發入門(八)SQLite資料庫 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次 ...
- 如何將 MySQL 資料庫轉移到 Microsoft SQL Server 與 Azure SQL Database
MySQL 是相當常用之資料庫伺服器,而微軟雲端服務 Microsoft Azure 上 Azure SQL Database 是一個功能強大且經濟實惠的選擇,透過本篇文章,使用 SQL Server ...
- vb.net 水晶報表CrystalReport 動態設定資料庫來源
沒有出現CrystalReportViewer時,須安裝CRforVS_13_0. 新增1個數據集,新增1個數據表,添加二列,列名要和資料庫名一樣. 修改目標Framework 修改app.confi ...
- [转]SQL Server 安全性概論與無法刪除資料庫使用者的解決辦法
經常有人來問我特定 SQL Server 資料庫裡的使用者無法刪除的問題,這問題其實跟 SQL Server 的安全性架構有很大關係,解決這個問題當然還是瞭解觀念的重要性大於知道如何解決問題.除了講解 ...
- 安卓初級教程(4):sqlite建立資料庫
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ...
- [MVC4-基礎] 從資料庫取值顯示在DropDownList中
剛開始學MVC4,以下是一些基礎的學習筆記! 完成效果像下面這樣,資料來源是既有的Database. 1.Controller public ActionResult Index() { SqlCon ...
- VB.Net DataSet 填充資料庫內容
'導入命名空間Imports System.Data.OleDb '定義變量 Dim ds As DataSet = New DataSet() Dim i, cn As Integer Dim Sq ...
随机推荐
- python+pycharm环境搭建
1.下载python安装包 https://www.python.org/downloads/ 2.下载pycharm安装包. https://www.jetbrains.com/pycharm/do ...
- 1-C++的并发世界
1.1 何谓并发 并发的两种方式 多核机器上的真正并行 单核机器的任务切换 并发的两种途径 多进程并发 1.1 多进程并发需要通过操作系统进行进程间通信 多线程并发 2.1 多线程并发需要共享内存 1 ...
- 记一个centos分区大小调整过程
1. 备份 /home 目录 [root@centos ~]# cp -r /home /home_backup 2. 查看目前磁盘使用的情况, 需要将 /dev/mapper/centos-home ...
- httpclient的调用 发送json字符串
public static String postHttp(JSONObject jsonObject, String jsonUrl){ String responseMsg="" ...
- 你可以这么理解五种I/O模型
因为项目需要,接触和使用了Netty,Netty是高性能NIO通信框架,在业界拥有很好的口碑,但知其然不知其所以然. 所以本系列文章将从基础开始学起,深入细致的学习NIO.本文主要是介绍五种I/O模型 ...
- Dubbo 源码分析 - 服务调用过程
注: 本系列文章已捐赠给 Dubbo 社区,你也可以在 Dubbo 官方文档中阅读本系列文章. 1. 简介 在前面的文章中,我们分析了 Dubbo SPI.服务导出与引入.以及集群容错方面的代码.经过 ...
- 使用jenkins自部署Coding项目
下载安装jenkins 下载地址:https://jenkins.io/download/ 安装后通过主机的8080端口进行程序设置,插件安装默认的就好 Jenkins项目目录:C:\Program ...
- CentOS 7 - 更新JDK,删除旧JDK,安装新JDK
一,检查是否安装JDK. yum list installed | grep java 二,删除旧JDK. yum -y remove java-1.7.0-openjdk* yum -y remov ...
- Redis学习笔记之延时队列
目录 一.业务场景 二.Redis延时队列 一.业务场景 所谓延时队列就是延时的消息队列,下面说一下一些业务场景比较好理解 1.1 实践场景 订单支付失败,每隔一段时间提醒用户 用户并发量的情况,可以 ...
- 学习关于display :flex 布局问题!
很多人不明白这个display:flex是到底是什么东西,如何使用的 . 1.什么是display:flex呢? 答:flex是 flexible box的缩写,意为弹性布局 :这个东西的引入,为 ...