作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在将 liquibase 与基于 SQL 的变更集一起使用,其中大多数都包含 INSERT 语句。根据文档,这种类型的更新操作不会产生(通过工具)自动回滚语句。
我的问题是(我可能遗漏了一些东西),因为我们可以声明某个变更集可以在数据库事务的上下文中运行,如果在应用变更集期间发生错误,该工具(liquibase)是否可以仅发出事务回滚对于这个特定的变更集?
我的情况是,目前所有这些脚本都是开发过程的一部分,这些脚本尚未最终确定,这意味着有人更改了内容,我们从头开始回复它们。如果在 2000 行插入脚本中 SQL 中存在错误,我希望该工具自动回滚当前事务而不提交数据库中的更改。
非常感谢您的任何提示
最佳答案
在更新过程中,liquibase 在一个事务中运行每个 changeSet,如果有任何错误,则将其回滚。因此,如果您有一个 2000 行的插入,但在中途出现错误,它将按预期失败并自动回滚。
没有自动生成的是 SQL 在插入后“回滚”(在这种情况下是删除)插入。如果您在 changeSet 中指定一个块,那么在更新成功执行并提交后,您可以稍后运行“liquibase rollback v2.3”,它将撤消自 v2.3 标签以来的更改。它不能依赖数据库回滚功能,因为它已经提交。
这可能有点令人困惑,因为在这种情况下回滚与事务上下文中术语“回滚”的正常数据库使用不同。
关于liquibase - liquibase 变更集的事务性回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22477794/
我是一名优秀的程序员,十分优秀!