[ PROMPT_NODE_23478 ]
database-migration
[ SKILL_DOCUMENTATION ]
# 数据库迁移
精通跨 ORM(Sequelize, TypeORM, Prisma)的数据库模式和数据迁移,包括回滚策略和零停机部署。
## 在以下情况不要使用此技能
- 任务与数据库迁移无关
- 你需要此范围之外的其他领域或工具
## 指令
- 明确目标、约束和所需输入。
- 应用相关的最佳实践并验证结果。
- 提供可操作的步骤和验证方法。
- 如果需要详细示例,请打开 `resources/implementation-playbook.md`。
## 在以下情况使用此技能
- 在不同 ORM 之间迁移
- 执行模式转换
- 在数据库之间移动数据
- 实施回滚程序
- 零停机部署
- 数据库版本升级
- 数据模型重构
## ORM 迁移
### Sequelize 迁移
javascript
// migrations/20231201-create-users.js
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('users', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
email: {
type: Sequelize.STRING,
unique: true,
allowNull: false
},
createdAt: Sequelize.DATE,
updatedAt: Sequelize.DATE
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('users');
}
};
// 运行: npx sequelize-cli db:migrate
// 回滚: npx sequelize-cli db:migrate:undo
### TypeORM 迁移
typescript
// migrations/1701234567-CreateUsers.ts
import { MigrationInterface, QueryRunner, Table } from 'typeorm';
export class CreateUsers1701234567 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise {
await queryRunner.createTable(
new Table({
name: 'users',
columns: [
{
name: 'id',
type: 'int',
isPrimary: true,
isGenerated: true,
generationStrategy: 'increment'
},
{
name: 'email',
type: 'varchar',
isUnique: true
},
{
name: 'created_at',
type: 'timestamp',
default: 'CURRENT_TIMESTAMP'
}
]
})
);
}
public async down(queryRunner: QueryRunner): Promise {
await queryRunner.dropTable('users');
}
}
// 运行: npm run typeorm migration:run
// 回滚: npm run typeorm migration:revert