# Db Migrator

数据库迁移助手 - Schema 对比、迁移脚本生成

- Repository: https://github.com/laolaoshiren/claude-code-skills-zh (899 stars)
- Category: Engineering
- License: MIT
- Last updated: 2026-10-31
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add laolaoshiren/claude-code-skills-zh --skill db-migrator -g -a claude-code -y`
Codex: `npx skills add laolaoshiren/claude-code-skills-zh --skill db-migrator -g -a codex -y`
Cursor: `npx skills add laolaoshiren/claude-code-skills-zh --skill db-migrator -g -a cursor -y`
Gemini CLI: `npx skills add laolaoshiren/claude-code-skills-zh --skill db-migrator -g -a gemini-cli -y`

## Description

数据库迁移助手 - Schema 对比、迁移脚本生成

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# 数据库迁移助手

## 触发条件
当用户要求数据库迁移、生成 migration、schema 变更、数据库升级时激活此技能。

## 工作流程

### 第 1 步：识别框架
扫描项目文件，判断使用的 ORM/迁移框架：
- `alembic.ini` / `alembic/` → Alembic
- `prisma/schema.prisma` → Prisma
- `pom.xml` 含 flyway → Flyway
- `manage.py` + `settings.py` → Django
- `Gemfile` + `db/migrate/` → Rails

### 第 2 步：分析 Schema 变更
- 对比 models 定义与现有迁移历史
- 识别新增/修改/删除的表和字段
- 检测索引、约束、外键变更

### 第 3 步：生成迁移脚本
根据框架生成对应的迁移文件，并同时生成回滚脚本。

### 第 4 步：风险评估
- 大表 DDL 变更（锁表风险）
- 数据迁移需求
- 向后兼容性

## 迁移模板

### Alembic (Python)
```python
"""add email column to users

Revision ID: abc123
"""
from alembic import op
import sqlalchemy as sa

def upgrade():
    op.add_column('users', sa.Column('email', sa.String(255), nullable=True))
    op.create_index('ix_users_email', 'users', ['email'], unique=True)

def downgrade():
    op.drop_index('ix_users_email')
    op.drop_column('users', 'email')
```

### Flyway (Java)
```sql
-- V2__add_email_to_users.sql
ALTER TABLE users ADD COLUMN email VARCHAR(255);
CREATE UNIQUE INDEX ix_users_email ON users(email);

-- 回滚脚本 (单独文件 U2__rollback_add_email.sql)
-- 逆向操作
```

### Prisma (Node.js)
```prisma
// schema.prisma 变更
model User {
  id    Int     @id @default(autoincrement())
  name  String
  email String? @unique  // 新增字段
}
```
```bash
# 默认仅生成迁移，不执行数据库变更
npx prisma migrate dev --name add-email-to-users --create-only
```

检查生成的 SQL、连接目标和备份后，再由用户确认执行：

```bash
# 开发环境应用迁移
npx prisma migrate dev

# 生产环境应用已审核并提交的迁移
npx prisma migrate deploy
```

### Django (Python)
```python
# users/migrations/0002_add_email.py
from django.db import migrations, models

class Migration(migrations.Migration):
    dependencies = [('users', '0001_initial')]

    operations = [
        migrations.AddField(
            model_name='user',
            name='email',
            field=models.EmailField(unique=True, null=True),
        ),
    ]
```

`unique=True` 已由 Django 生成唯一约束和对应索引，不要再创建重复索引。

The rest: https://github.com/laolaoshiren/claude-code-skills-zh/blob/HEAD/skills/db-migrator/SKILL.md
