数据库变更也叫模式迁移,是管理数据库生命周期的过程。本文列举了几个数据库变更管理工具,后续持续更新完善。主要包括Flyway、LiquiBase、MyBatis migration、DBDeploy、DBMaintain。更多关于模式迁移与其他工具,参考schema migration的wiki。
Flyway
Flyway是一个开源的数据库迁移工具。支持命令行以及JAVA方式运行。支持众多数据库。
运行模式
命令行
API(Java/Android)
Maven
Gradle
SBT
Ant
基本命令
Migrate, Clean, Info, Validate, Baseline and Repair
变更方式
SQL: SQL脚本的形式描述变更
JAVA: 使用JVM应用实现数据库迁移(例如操作BLOB)
LiquiBase
LiquiBase是一个强大的数据库变更维护工具,通过change Log, change set,changes,precondition, context等概念,提供强大的变更执行、版本控制、集成等功能。
官网: http://www.liquibase.org/
文档:http://www.liquibase.org/documentation/index.html
使用步骤:
1)创建changelog文件:XML JSON YAML 或者SQL格式
change log文件描述数据库的变更内容,下面是一个空的change log:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
</databaseChangeLog>
2)添加changeset到changelog文件
change set是liquibase执行数据库变更的基本单元,是事务执行单元。但是像create,drop这样的语句,有些数据库是直接提交事务并恢复事务,客户端不可知。change set一般封装一个原子的数据库变更。
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
<changeSet id="1" author="bob">
<createTable tableName="department">
<column name="id" type="int">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="name" type="varchar(50)">
<constraints nullable="false"/>
</column>
<column name=