ETest-Vue-FastAPI/docs/MIGRATION_GUIDE.md

140 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 数据库迁移执行指南
## 迁移脚本列表
| 阶段 | 脚本文件 | 说明 |
|------|----------|------|
| 第一阶段 | `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. ⏳ 实现业务逻辑