liquibase如何确定应该应用哪些更改?

时间:2017-09-06 14:41:52

标签: liquibase

我是liquibase的新手,我读过liquibase文档,但仍未找到,liquibase如何确定数据库的当前版本以及应在update上应用哪些更改。

例如,如果要考虑来自liquibase站点主页的SQL脚本:

第一次运行update,sql文件是:

--liquibase formatted sql

--changeset nvoxland:1
create table person (
  id int not null primary key,
  firstname varchar(80),
  lastname varchar(80) not null,
  state varchar(2)
);

第二次运行update,脚本是

--liquibase formatted sql

--changeset nvoxland:1
create table person (
  id int not null primary key,
  firstname varchar(80),
  lastname varchar(80) not null,
  state varchar(2)
);

--changeset nvoxland:2
alter table person MODIFY column firstname varchar(8)

第三轮是:

--liquibase formatted sql

--changeset nvoxland:1
create table person (
  id int not null primary key,
  firstname varchar(80),
  lastname varchar(80) not null,
  state varchar(2)
);

--changeset nvoxland:2
alter table person MODIFY column firstname varchar(8)

--changeset nvoxland:3
alter table person MODIFY column firstname varchar(10)

第4次运行:

--liquibase formatted sql

--changeset nvoxland:1
create table person (
  id int not null primary key,
  firstname varchar(80),
  lastname varchar(80) not null,
  state varchar(2)
);

--changeset nvoxland:2
alter table person MODIFY column firstname varchar(8)

--changeset nvoxland:3
alter table person MODIFY column firstname varchar(10)

--changeset nvoxland:4
alter table person MODIFY column firstname varchar(8)
第五轮是:

--liquibase formatted sql

--changeset nvoxland:1
create table person (
  id int not null primary key,
  firstname varchar(80),
  lastname varchar(80) not null,
  state varchar(2)
);

--changeset nvoxland:2
alter table person MODIFY column firstname varchar(8)

--changeset nvoxland:3
alter table person MODIFY column firstname varchar(10)

--changeset nvoxland:4
alter table person MODIFY column firstname varchar(8)

--changeset nvoxland:5
alter table person MODIFY column firstname varchar(15)

第5次update运行会发生什么以及liquibase将如何确定,第4次运行后数据库版本将为“4”并需要将列修改为15个字符长度?

可能是,liquibase在数据库中添加了一些“版本”表,它会在哪里插入最新版本的应用变更集/补丁?

谢谢!

1 个答案:

答案 0 :(得分:3)

http://www.liquibase.org/documentation/index.html说:

  

变更集由"作者"唯一标识。和" id"属性以及changelog文件的位置,是Liquibase跟踪执行的单位。当Liquibase运行时,它会在DATABASECHANGELOG表中查询标记为已执行的变更集,然后在changelog文件中执行尚未执行的所有变更集。