sql - 使用 Liquibase 进行数据库迁移有什么好处?

标签 sql liquibase

我正在评估 Liquibase 并试图弄清楚它是否比仅使用 SQL 脚本在数据迁移方面具有任何优势。假设我正在执行以下操作:

我的版本 0 数据库架构如下所示:

CREATE TABLE  `Person` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `firstName` varchar(255) NOT NULL,
  `lastName` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);

数据库填充了一些由以下插入表示的现有数据:
INSERT INTO `Person` (`id`, `firstName`, `lastName`) VALUES (1, 'foo', 'bar');

然后我决定将另一列添加到 Person 表中,该列不为空,但我不想丢失任何现有数据。从版本 0 到版本 1 的迁移脚本如下所示:
ALTER TABLE `Person` ADD COLUMN `dob` date DEFAULT NULL;

UPDATE `Person` set `dob` = '1970-01-01';

ALTER TABLE `Person` MODIFY COLUMN `dob` NOT NULL;

Liquibase 能让这个用例更容易吗?

最佳答案

liquibase 为您提供的主要功能是跟踪哪些更改已应用于哪些数据库。

在您的示例中,您列出的 SQL 正是 liquibase 会做的,但它能够知道您的开发数据库处于版本 Y 并且当您“更新”您的数据库时,它只会应用一些新的更改,而生产在版本 X 上,当您“更新”生产时,它将应用更多更改。

注意:liquibase 独立跟踪更改,而不是使用单个版本来支持多个开发人员和/或代码分支。

除了跟踪应用更改的工作之外,liquibase 还可以为您带来其他优势:

  • 能够对多种数据库类型具有相同的更改描述。
  • 能够在应用的内容中具有 if/then 逻辑。
  • 生成的数据库历史文档。
  • 能够轻松指定更复杂的多语句更改。
  • 关于sql - 使用 Liquibase 进行数据库迁移有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10033205/

    相关文章:

    sql - 修剪时间超出范围

    sql - POSTGRESQL 数组不包含值

    intellij-idea - Liquibase intellij集成?

    oracle - 将整个模式从 oracle 数据库提取到另一个(java)(自动化)

    mysql - 使用 liquibase 使用序列的数据库不可知示例

    mysql - 如何在表中获取所需的记录?

    mysql - 删除记录时 SQL 触发器不起作用

    php - foreach 循环和 SQL (PDO) 的问题

    java - 如何使用类路径通过 Liquibase 回滚数据库更改

    java - 在 Hibernate 之前运行 SpringLiquibase