编程指南-学习建议编程指南-学习建议
首页
学习方向
技术学习
🚀 编程指南
首页
学习方向
技术学习
🚀 编程指南
  • 三、技术学习

    • 技术指南

      • 前端技术知识

        • 什么是前端?
      • 后端技术知识

        • 什么是缓存?
        • 什么是工作流技术?
        • 什么是反向压力?
        • 什么是热数据探测?
        • 数据库也能版本控制?
        • /tech-learning/guide/backend/how-search-engine-works.html
        • /tech-learning/guide/backend/learn-concurrency.html
        • /tech-learning/guide/backend/other-databases.html
      • 通用技术知识

        • 什么是前后端分离?
        • /tech-learning/guide/general/what-is-redirect.html
        • 什么是单例模式?
        • /tech-learning/guide/general/what-is-magic-value.html
        • 什么是负载均衡?
        • /tech-learning/guide/general/what-is-multi-env.html
        • /tech-learning/guide/general/what-is-magic-number.html
        • 什么是 Linux?
        • /tech-learning/guide/general/what-is-cloud-dev.html
    • 系统设计

      • 如何设计一个实时排行榜系统?
      • /tech-learning/system-design/elasticsearch-optimization.html
      • /tech-learning/system-design/file-upload.html
      • /tech-learning/system-design/log-system.html
      • /tech-learning/system-design/software-sword.html
      • 如何设计好 API 接口?
      • /tech-learning/system-design/sdk-development.html
      • /tech-learning/system-design/architecture-design.html
      • /tech-learning/system-design/release-stability.html
    • 开发经验

      • 解决 Bug 经验
      • 如何快速上手新项目?
      • /tech-learning/dev-experience/enterprise-software.html
      • /tech-learning/dev-experience/opensource-contribute.html
      • 什么是代码规范?为什么要遵循代码规范?
      • /tech-learning/dev-experience/company-standards.html
      • /tech-learning/dev-experience/code-reuse.html
      • /tech-learning/dev-experience/quick-website.html
      • /tech-learning/dev-experience/vscode-remote.html
      • /tech-learning/dev-experience/linux-vm-remote.html
      • /tech-learning/dev-experience/young-contributor.html
      • /tech-learning/dev-experience/no-force-shutdown.html
      • /tech-learning/dev-experience/no-hardcode.html
      • /tech-learning/dev-experience/backend-attention.html
      • 千万别直接敲代码!(写代码前要做的事)
      • /tech-learning/dev-experience/project-attention.html
      • /tech-learning/dev-experience/website-online.html
      • /tech-learning/dev-experience/tech-selection.html

数据库也能版本控制?

代码可以用Git管理版本,数据库的结构变更能不能也管理起来?

答案是可以的。

为什么需要数据库版本控制

问题场景

  • 开发环境加了一个字段,测试环境忘了加,上线出问题
  • 不知道某个字段是什么时候加的、谁加的
  • 多人开发,数据库结构冲突

数据库版本控制能解决

  • 记录每次数据库结构变更
  • 自动同步到各个环境
  • 可以回滚

常用的工具

Flyway

Java项目中最流行的数据库版本控制工具。

用SQL文件管理变更:

V1__create_user_table.sql
V2__add_email_column.sql
V3__create_order_table.sql

Flyway会自动执行没执行过的脚本。

Liquibase

另一个流行的选择,功能更丰富。

支持XML、YAML、JSON、SQL多种格式定义变更。

Flyway怎么用

1. 添加依赖

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
</dependency>

2. 创建SQL文件

在resources/db/migration目录下创建SQL文件:

-- V1__create_user_table.sql
CREATE TABLE user (
    id BIGINT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

3. 启动应用

Spring Boot会自动执行这些脚本。

命名规范

Flyway的SQL文件命名有规范:

V1__description.sql     -- 版本迁移脚本
V1.1__description.sql   -- 版本迁移脚本
R__description.sql      -- 可重复执行的脚本
  • V开头是版本号,必须递增
  • 两个下划线分隔版本号和描述
  • 描述用下划线分隔单词

好处

1. 可追溯

每次变更都有记录,知道是什么时候、什么人改的。

2. 环境一致

各个环境的数据库结构自动保持一致。

3. 可回滚

出问题可以回滚到之前的版本。

4. 团队协作

数据库变更也放在Git里,和代码一起review。

最后

数据库版本控制是企业开发的标配。

如果你的项目还是手动执行SQL同步数据库结构,是时候引入Flyway这样的工具了。

上次更新: 2025/12/7 09:34
Prev
什么是热数据探测?
Next
/tech-learning/guide/backend/how-search-engine-works.html