# 数据库迁移说明

本目录包含 KPL 考培练系统的数据库迁移脚本。

## 迁移脚本列表

| 脚本 | 说明 | 创建时间 |
|------|------|----------|
| `add_level_badge_system.sql` | 等级与奖章系统 | 2026-01-29 |

## 执行迁移

### 测试环境（Docker）

KPL 测试环境数据库在服务器 Docker 容器中运行：

```bash
# 1. SSH 登录 KPL 服务器
ssh root@<KPL服务器IP>

# 2. 进入项目目录
cd /www/wwwroot/kpl.ireborn.com.cn

# 3. 执行迁移（方法一：直接执行）
docker exec -i kpl-mysql-dev mysql -uroot -pnj861021 kpl_dev < backend/migrations/add_level_badge_system.sql

# 或者（方法二：交互式执行）
docker exec -it kpl-mysql-dev mysql -uroot -pnj861021 kpl_dev
# 然后复制粘贴 SQL 脚本内容执行

# 方法三：从本地执行（需要先上传SQL文件到服务器）
# scp backend/migrations/add_level_badge_system.sql root@<服务器IP>:/tmp/
# ssh root@<服务器IP> "docker exec -i kpl-mysql-dev mysql -uroot -pnj861021 kpl_dev < /tmp/add_level_badge_system.sql"
```

**注意**：MySQL 容器密码为 `nj861021`（之前通过 `docker exec kpl-mysql-dev env | grep MYSQL` 确认）

### 生产环境

生产环境迁移前请确保：
1. 已备份数据库
2. 在低峰期执行
3. 测试环境验证通过

```bash
# 执行迁移（替换为实际的生产数据库配置）
mysql -h<host> -u<user> -p<password> <database> < backend/migrations/add_level_badge_system.sql
```

## 回滚方法

如需回滚，执行以下 SQL：

```sql
DROP TABLE IF EXISTS user_badges;
DROP TABLE IF EXISTS badge_definitions;
DROP TABLE IF EXISTS exp_history;
DROP TABLE IF EXISTS level_configs;
DROP TABLE IF EXISTS user_levels;
```

## 验证迁移

执行以下查询验证表是否创建成功：

```sql
SHOW TABLES LIKE '%level%';
SHOW TABLES LIKE '%badge%';
SHOW TABLES LIKE '%exp%';

-- 查看表结构
DESCRIBE user_levels;
DESCRIBE exp_history;
DESCRIBE badge_definitions;
DESCRIBE user_badges;
DESCRIBE level_configs;

-- 验证初始数据
SELECT COUNT(*) FROM level_configs;  -- 应该是 10 条
SELECT COUNT(*) FROM badge_definitions;  -- 应该是 20 条
SELECT COUNT(*) FROM user_levels;  -- 应该等于用户数
```
