database-migration 用于管理数据库 schema 变更,采用版本化、可重复的迁移方式。资料覆盖多种工具的具体命令,暂未说明其安装来源与运行环境。
Prisma(Node.js):npx prisma migrate dev --name add_users_table 从 schema 变更创建迁移;生产环境用 npx prisma migrate deploy 应用;npx prisma migrate status 查看状态;npx prisma migrate reset 重置数据库(会销毁数据);改动 schema 后用 npx prisma generate 生成客户端;npx prisma db pull 查看当前 schema。
Knex(Node.js):npx knex migrate:make add_users_table 创建迁移文件;migrate:latest 运行待执行迁移;migrate:rollback 回滚上一批,加 --all 回滚全部;migrate:status 查看状态;seed:make 与 seed:run 创建并运行种子数据。
Alembic(Python/SQLAlchemy):alembic init alembic 初始化;revision --autogenerate -m "add users table" 自动生成迁移;upgrade head 应用全部待执行;downgrade -1 回滚一步;current 查看版本;history --verbose 查看历史;upgrade head --sql 可只生成 SQL 而不执行。
Flyway(Java/多语言):flyway migrate 应用迁移;info 查看状态;validate 校验迁移与已应用是否匹配;undo 仅在 Teams 版可用;clean 清空数据库(销毁全部);baseline 为已有数据库建立基线。
原生 SQL:PostgreSQL 用 psql $DATABASE_URL -f migrations/001_create_users.sql;MySQL 用 mysql -u $DB_USER -p$DB_PASS $DB_NAME < migrations/001_create_users.sql;可用 versions 表手动记录版本。Schema 差异对比:Prisma 用 npx prisma migrate diff;PostgreSQL 用 pg_dump --schema-only 导出后 diff 比较。
注意事项:生产执行前先在数据副本上测试并备份数据库;迁移尽量幂等(IF NOT EXISTS、IF EXISTS);不要修改已应用的迁移,应新建一个;零停机部署可先加可空列、回填再加约束。