Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →数据库迁移助手 - Schema 对比、迁移脚本生成
.claude/skills/laolaoshiren-db-migrator/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✓→✓ | = Same ✓ | 32% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 41% | 0% |
| case-06 | ✓→✓ | = Same ✓ | 18% | 0% |
| case-07 | ✓→✓ | = Same ✓ | 98% | 0% |
| case-08 | ✓→✓ | = Same ✓ | -18% | 0% |
当用户要求数据库迁移、生成 migration、schema 变更、数据库升级时激活此技能。
扫描项目文件,判断使用的 ORM/迁移框架:
alembic.ini / alembic/ → Alembicprisma/schema.prisma → Prismapom.xml 含 flyway → Flywaymanage.py + settings.py → DjangoGemfile + db/migrate/ → Rails根据框架生成对应的迁移文件,并同时生成回滚脚本。
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')
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// 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
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 生成唯一约束和对应索引,不要再创建重复索引。
ruby# db/migrate/20260617_add_email_to_users.rb class AddEmailToUsers < ActiveRecord::Migration[7.0] def change add_column :users, :email, :string add_index :users, :email, unique: true end end
bashrails db:migrate # 执行迁移 rails db:rollback # 回滚上一次 rails db:rollback STEP=3 # 回滚最近 3 次
| 场景 | 策略 | |------|------| | 新增列 | 直接移除该列 | | 删除列 | 无法自动回滚,需提前备份数据 | | 修改列类型 | 反向修改为原类型,注意数据丢失风险 | | 新增表 | 移除该表 | | 数据迁移 | 编写反向迁移脚本,保留原始数据快照 | | 大表变更 | 使用在线 DDL 工具避免锁表 |
Other measured skills in the registry, with their headline benchmark lift.