flyway和liquibase的使用樣例


在代碼上我們有svn和git等諸多的版本控制方法。

但是在數據庫上卻沒有相應的工具。一度導致多環境見的數據庫同步難以維持。

flyway和liquibase都是常見的數據庫版本控制工具。

flyway社區版的功能相對完全免費的liquibase來說簡直毫無可比性。

因此免費用戶的話強烈liquibase。

樣例代碼已上傳至Github:https://github.com/hackyoMa/changedb,樣例基於Spring Boot。

flyway:

application.yml

spring:
  datasource:
    platform: mysql
    url: jdbc:mysql://xxx:3306/xxx?useUnicode=true&characterEncoding=utf8&useSSL=false
    username: xxx
    password: xxx
    driver-class-name: com.mysql.jdbc.Driver
  jpa:
    database: MYSQL
    show-sql: true
    hibernate:
      ddl-auto: none
  flyway:
    locations: classpath:db/migration

resources\db\migration\目錄下文件:

V1_0__createBook.sql

CREATE TABLE `book`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `create_time` datetime(0) NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
CREATE TABLE `test`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
CREATE TRIGGER book_trigger AFTER INSERT ON book FOR EACH ROW BEGIN
  INSERT INTO test (`name`) VALUES ('1');
END;

V1_1__insertBook.sql

INSERT INTO book(name, create_time) VALUES ('測試', '2018-04-21 16:53:48');

 

liquibase:

application.yml

spring:
  datasource:
    platform: mysql
    url: jdbc:mysql://xxx:3306/xxx?useUnicode=true&characterEncoding=utf8&useSSL=false
    username: xxx
    password: xxx
    driver-class-name: com.mysql.jdbc.Driver
  jpa:
    database: MYSQL
    show-sql: true
    hibernate:
      ddl-auto: none
  liquibase:
    change-log: classpath:db/changelog/db.changelog-master.xml

resources\db\changelog\目錄下文件:

db.changelog-1.0.sql

--liquibase formatted sql
--changeset mahaoyu:1.0
CREATE TABLE `book`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `create_time` datetime(0) NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
--changeset mahaoyu:1.1
CREATE TABLE `test`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;

db.changelog-1.1.sql

--liquibase formatted sql
--changeset mahaoyu:1.2 splitStatements:false
CREATE TRIGGER book_trigger AFTER INSERT ON book FOR EACH ROW BEGIN
  INSERT INTO test (`name`) VALUES ('1');
END;
--changeset mahaoyu:1.3 splitStatements:false
CREATE PROCEDURE `proc_adder` ( IN a INT, IN b INT, OUT sum INT ) BEGIN
    DECLARE
        c INT;
    IF
        a IS NULL THEN
            SET a = 0;
    END IF;
    IF
        b IS NULL THEN
            SET b = 0;
    END IF;
    SET sum = a + b;
END;
--changeset mahaoyu:1.4
CREATE VIEW Oceania AS SELECT * FROM book;
--changeset mahaoyu:1.5 splitStatements:false
CREATE FUNCTION hello ( ) RETURNS VARCHAR ( 255 ) BEGIN
RETURN 'Hello  world,i am mysql';
END;
--changeset zhangsan:1.6
INSERT INTO book(name, create_time) VALUES ('測試', '2018-04-21 16:53:48');

db.changelog-master.xml

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
                      http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">

    <include file="db/changelog/db.changelog-1.0.sql"/>
    <include file="db/changelog/db.changelog-1.1.sql"/>

</databaseChangeLog>

這里對liquibase的事務、觸發器等進行了示例。另外liquibase還支持xml語法,以增加對不同數據庫的支持。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM