zoukankan      html  css  js  c++  java
  • [心得] 如何利用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的時候也一樣會在資料庫上面產生對應的「還原」動作

  • 相关阅读:
    Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之验证码
    ABP前端使用阿里云angular2 UI框架NG-ZORRO分享
    ASP.NET Core之跨平台的实时性能监控(2.健康检查)
    应用程序的8个关键性能指标以及测量方法
    ASP.NET Core之跨平台的实时性能监控
    浅析Entity Framework Core2.0的日志记录与动态查询条件
    开发短网址平台的思路
    Nginx解决错误413 Request Entity Too Large
    配置Nginx实现负载均衡
    Windows下Nginx的安装及使用方法入门
  • 原文地址:https://www.cnblogs.com/KingJaja/p/5171209.html
Copyright © 2011-2022 走看看