">
我使用这些脚本进行回滚测试。但是我的数据库没有发生什么事,回滚不起作用。还能插进去。请帮帮我!
<changeSet author="me" id="123123">
<sql>
INSERT INTO employee (id, name) VALUES ('adad', 'test')
</sql>
<rollback/>
</changeSet>
发布于 2020-04-14 21:23:48
当您使用清算脚本时,理解回滚的概念是很重要的,因为这可能会被滥用。
液基移动的范畴
Liquibase操作有两类,产生了不同一代的rollback语句:
自动,迁移可以决定性地生成回滚手册所需的步骤,其中我们需要发出回滚命令,因为迁移指令无法确定地标识语句--例如,“create table
”语句的回滚将是“drop
”创建的表。毫无疑问,这是可以确定的,因此rollback语句可以自动生成。
另一方面,无法确定“drop table
”命令的rollback语句。无法确定表的最后状态,因此无法自动生成rollback语句。这些类型的迁移语句需要手动回滚说明。
以下是上述语句的一个示例
<changeSet id="testRollback" author="stackoverflow">
<createTable tableName="stackoverflow_turorial">
<column name="id" type="int"/>
<column name="heading" type="varchar(36)"/>
<column name="author" type="varchar(36)"/>
</createTable>
<rollback>
<dropTable tableName="stackoverflow_test"/>
</rollback>
</changeSet>
因此,在您的情况下,回滚不能保持为空,应该得到一些声明。
让我们更正您的代码.
<changeSet author="me" id="123123">
<sql>INSERT INTO EMPLOYEE (id, name) VALUES ('adad', 'test')</sql>
<rollback>DELETE FROM EMPLOYEE WHERE ID = 'adad'</rollback>
</changeSet>
我们可以使用以下命令运行迁移:
mvn liquibase:update
执行之后,我们可以使用以下方法回滚操作:
mvn liquibase:rollback
这将执行变更集的回滚段,并应恢复在更新阶段完成的任务。但是如果我们只发出这个命令,构建就会失败。
原因是--我们没有指定回滚的限制;数据库将通过回滚到初始阶段而完全删除。因此,在满足条件时,必须定义以下三个约束中的一个来限制回滚操作:
回到Tag的
我们可以将数据库的特定状态定义为标记。因此,我们可以回到那个状态。回滚到标签名“1.0”如下所示:
mvn liquibase:rollback -Dliquibase.rollbackTag=1.0
这将执行标记“1.0”之后执行的所有变更集的rollback语句。
按计数滚回
在这里,我们定义了需要回滚的变更集。如果我们将其定义为1,则最后一个变更集执行将回滚:
mvn liquibase:rollback -Dliquibase.rollbackCount=1
滚回原来的
我们可以将回滚目标设置为日期,因此,在该日之后执行的任何更改集都将回滚:
mvn liquibase:rollback "-Dliquibase.rollbackDate=Jun 03, 2017"
日期格式必须是ISO数据格式,或者应该与执行平台的DateFormat.getDateInstance()值相匹配。
此外,您还可以在不同的sql文件中提到sql,并在这里提供引用。
https://stackoverflow.com/questions/61134257
复制