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