Visual LabINTERACTIVE LEARNING
01 · DATA MODELINGP011 MIN

数据库 Migration

让表结构变化可审查、可排序、可部署,并兼容正在运行的旧代码。

MENTAL MODELSCHEMA EVOLUTION
01Expand 新结构
02双写 / 回填
03切换读取
04Contract 旧结构
Migration 是数据库结构的版本历史;上线不是“把本地最终状态同步过去”,而是安全地执行一串状态转换。
01 · CONCEPTS & BOUNDARIES

先把概念与边界说清楚

定义告诉你它是什么,边界告诉你它不负责什么;企业系统最常见的误解通常发生在两者混用时。

01

Migration

记录一次有顺序的结构或数据变化,例如建表、加列、回填和加约束。

02

Expand / Migrate / Contract

先添加兼容结构,再迁移数据与流量,最后删除旧结构,避免新旧版本互相阻塞。

03

Data Migration

除结构外还要转换存量数据,通常需要批次、进度和可重入设计。

02 · BLIND BOTS CASE

给订单增加 tenant_id

问题现场

生产库已有百万订单,直接添加 NOT NULL 列会失败或长时间锁表。

  1. 01

    先加可空列和索引。

  2. 02

    按主键批次回填 tenant_id。

  3. 03

    应用改为写入并校验新字段,最后添加 NOT NULL。

得到什么

迁移期间新旧版本都可工作,并能随时暂停回填。

03 · PRACTICE

马上动手

  1. 为“订单状态字符串改枚举”写 expand/migrate/contract 三阶段。
  2. 列出回滚代码与回滚数据的区别。
04 · PITFALLS

常见坑

  • 修改已发布 migration
  • 部署代码前先删除旧列
  • 把百万行回填做成一次同步事务
05 · KNOWLEDGE CHECK为什么 migration 已成功执行后不应直接修改文件?查看答案⌄
答案

因为不同环境已经拥有不同历史;修改旧文件会让“同名版本”代表不同事实,后续无法可靠复现或审计。