Schema 迁移
Flyway/Liquibase、schema.sql 直觉。
30 分钟
Schema 迁移
表结构会随功能演进变更。迁移工具(Flyway / Liquibase)把每次 DDL 变成版本化脚本,可重复、可审计——比手改线上库安全。
学习目标
- 理解
schema.sql与增量迁移的分工 - 读懂 Flyway 命名与执行顺序
- 知道 JPA
ddl-auto在生产为何禁用
本站现状
| 文件 | 用途 |
|---|---|
backend/src/main/resources/schema.sql | 全量建表(新环境初始化直觉) |
migration/V*.sql | 增量变更(Flyway 风格) |
cf_track、cf_lesson 等表定义以 schema.sql 为文档真相;线上变更走迁移脚本。
Flyway 脚本示例
-- V2__add_lesson_is_preview.sql
ALTER TABLE cf_lesson
ADD COLUMN is_preview TINYINT(1) NOT NULL DEFAULT 0
COMMENT '会员课是否可试看';
命名:V{版本}__{描述}.sql,按版本号顺序执行,已执行的不会重复跑。
Spring Boot 配置
spring:
flyway:
enabled: true
locations: classpath:db/migration
jpa:
hibernate:
ddl-auto: validate # 生产:只校验,不自动改表
| ddl-auto | 行为 | 环境 |
|---|---|---|
create-drop | 启动建表、关闭删表 | 单元测试 |
update | 自动 ALTER | 仅限本地实验 |
validate | 实体与表不一致则启动失败 | 生产推荐 |
ORM Entity 改了字段,必须同步写迁移 SQL,不能指望 Hibernate 自动 ALTER。
Liquibase(了解)
用 XML/YAML 描述变更,支持回滚块。团队若已标准化可选;本站示例以 Flyway SQL 为主。
对照 pg-migrate 理解跨数据库迁移思路。
相关课程
练习
- 打开
schema.sql,数一下cf_lesson有多少列 - 设计 给 加