ETest-Vue-FastAPI/docs/MIGRATION_GUIDE.md

140 lines
2.9 KiB
Markdown
Raw Normal View History

2026-03-30 10:38:36 +08:00
# 数据库迁移执行指南
## 迁移脚本列表
| 阶段 | 脚本文件 | 说明 |
|------|----------|------|
| 第一阶段 | `20260321_phase1_base_tables.sql` | 基础表:测试类别扩展、权限表 |
| 第二阶段 | `20260321_phase2_workorder_extend.sql` | 工单扩展:测试数据、重测记录 |
| 第三阶段 | `20260321_phase3_report_tables.sql` | 报告相关:报告表、审核记录 |
## 执行前准备
### 1. 备份数据库
```bash
# 使用 mysqldump 备份
mysqldump -u root -p etest > etest_backup_20260321.sql
```
### 2. 配置数据库连接
创建 `.env` 文件:
```
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASS=your_password
DB_NAME=etest
```
## 执行方式
### 方式1: 使用批处理脚本(推荐)
```bash
# 执行全部三个阶段
migrate.bat all
# 或分阶段执行
migrate.bat phase1
migrate.bat phase2
migrate.bat phase3
```
### 方式2: 使用 MySQL 命令行
```bash
# 第一阶段
mysql -u root -p etest < sql/migration/20260321_phase1_base_tables.sql
# 第二阶段
mysql -u root -p etest < sql/migration/20260321_phase2_workorder_extend.sql
# 第三阶段
mysql -u root -p etest < sql/migration/20260321_phase3_report_tables.sql
```
### 方式3: 使用 MySQL Workbench
1. 打开 MySQL Workbench
2. 连接到 etest 数据库
3. File → Open SQL Script
4. 依次打开三个 SQL 文件并执行
## 执行后验证
### 1. 检查表结构
```sql
-- 检查 test_category 扩展
DESCRIBE test_category;
-- 应该看到: parent_id, level, category_code, sort_order, report_config_type
-- 检查 test_permission 表
SHOW TABLES LIKE 'test_permission';
-- 检查 test_work_order 扩展
DESCRIBE test_work_order;
-- 应该看到: priority, expected_finish_date, claimed_by 等新字段
-- 检查报告相关表
SHOW TABLES LIKE 'test_report%';
SHOW TABLES LIKE 'report%';
```
### 2. 检查索引
```sql
-- 检查索引
SHOW INDEX FROM test_work_order;
SHOW INDEX FROM test_permission;
```
### 3. 验证现有数据
```sql
-- 检查现有数据是否完整
SELECT COUNT(*) FROM test_work_order;
SELECT COUNT(*) FROM test_category;
-- 检查新增字段是否为 NULL符合预期
SELECT priority, expected_finish_date, claimed_by
FROM test_work_order
LIMIT 5;
```
## 回滚方案
如果迁移失败,使用备份恢复:
```bash
mysql -u root -p etest < etest_backup_20260321.sql
```
## 常见问题
### Q1: 执行时报错 "Table already exists"
**原因**: 表已存在
**解决**: 确认是否重复执行,或手动删除后重新执行
### Q2: 字段已存在
**原因**: 之前已添加过这些字段
**解决**: 使用 `IF NOT EXISTS` 的脚本已处理此情况,可忽略
### Q3: 外键约束错误
**原因**: 数据不一致
**解决**: 先修复数据,再执行迁移
## 下一步
迁移完成后:
1. ✅ 更新 `docs/AGENT_HANDOVER.md` 标记迁移完成
2. ⏳ 生成后端实体代码
3. ⏳ 修改现有实体
4. ⏳ 实现业务逻辑