Liquibase交易回滚与<rollback>标签



我了解到Liquibase在一个事务中运行每个changeSet,并在插入DATABASECHANGELOG表后提交它。

如果在changeSet期间出现错误,事务将被回滚。

我的问题是,如果changeSet还包括<rollback>标记会发生什么。我知道回滚标记与liquibase专用回滚命令结合使用,但是在常规迁移期间,哪个具有优先级,是回滚标记的命令还是事务终止?

update失效时,<rollback>块不被使用。如果更新失败,Liquibase只调用"回滚"。依赖于连接,并依赖于数据库来正确回滚。<rollback>块仅在执行单独的rollback命令时使用,其中我们要"撤消"。已经在数据库中提交的变更集。

注意:事实上,Liquibase依赖于连接rollback来恢复失败的更新,这就是为什么你必须小心,如果你有多个语句在同一个changeSet。如果有两个createTable调用,并且数据库在第一个和第二个调用失败后自动提交,那么连接上的rollback将不会回滚第一个表。因此,当您下次运行update时,您将从第一个createTable获得table already exists错误。关于哪些语句自动提交的规则是特定于数据库的,所以最好的经验法则是"每个更改集只有一条语句">

相关内容

  • 没有找到相关文章

最新更新