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