# 数据库初始化使用说明

## 目录结构

```
.bin/mysql/
├── init-database.bat          # Windows批处理脚本
├── init-database.sh           # Linux/Mac Shell脚本
├── 使用说明.md                # 本文件
└── sql/
    ├── createDB.sql           # 创建数据库
    ├── createTableUser.sql    # 用户相关表
    ├── createTablePermission.sql  # 权限相关表
    ├── createTableResource.sql    # 资源管理相关表
    ├── createTableCourse.sql      # 课程管理相关表
    ├── createTableLearning.sql    # 学习管理相关表
    ├── createTableUserCenter.sql  # 个人中心相关表
    ├── createTableAI.sql          # 智能体相关表
    ├── createTableSystem.sql      # 系统配置和日志相关表
    ├── initAll.sql                # 一键执行所有SQL
    ├── README.md                  # 表结构详细说明
    ├── 表结构汇总.md              # 表结构汇总
    └── ER关系图.md                # ER关系图
```

## 快速开始

### 方法一：使用自动化脚本（推荐）

#### Windows环境

1. 确保已安装MySQL，并且MySQL命令行工具在系统PATH中
2. 双击运行 `init-database.bat`
3. 按提示输入MySQL连接信息
4. 等待初始化完成

#### Linux/Mac环境

1. 确保已安装MySQL客户端
2. 给脚本添加执行权限：
   ```bash
   chmod +x init-database.sh
   ```
3. 运行脚本：
   ```bash
   ./init-database.sh
   ```
4. 按提示输入MySQL连接信息
5. 等待初始化完成

### 方法二：使用MySQL命令行

#### 连接到MySQL

```bash
mysql -u root -p
```

#### 执行初始化脚本

```sql
SOURCE /path/to/.bin/mysql/sql/initAll.sql;
```

或者在命令行中执行：

```bash
cd .bin/mysql/sql
mysql -u root -p < createDB.sql
mysql -u root -p < createTableUser.sql
mysql -u root -p < createTablePermission.sql
mysql -u root -p < createTableResource.sql
mysql -u root -p < createTableCourse.sql
mysql -u root -p < createTableLearning.sql
mysql -u root -p < createTableUserCenter.sql
mysql -u root -p < createTableAI.sql
mysql -u root -p < createTableSystem.sql
```

### 方法三：使用数据库管理工具

使用 Navicat、DBeaver、phpMyAdmin 等数据库管理工具：

1. 连接到MySQL服务器
2. 依次执行以下SQL文件：
   - createDB.sql
   - createTableUser.sql
   - createTablePermission.sql
   - createTableResource.sql
   - createTableCourse.sql
   - createTableLearning.sql
   - createTableUserCenter.sql
   - createTableAI.sql
   - createTableSystem.sql

## 初始化后的验证

### 检查数据库是否创建成功

```sql
SHOW DATABASES LIKE 'school_news';
```

### 检查表是否创建成功

```sql
USE school_news;
SHOW TABLES;
```

应该看到约49张表。

### 检查默认数据是否插入成功

```sql
-- 检查默认用户
SELECT * FROM tb_sys_user;

-- 检查默认部门
SELECT * FROM tb_sys_dept;

-- 检查默认角色
SELECT * FROM tb_sys_role;

-- 检查默认权限
SELECT * FROM tb_sys_permission;

-- 检查默认菜单
SELECT * FROM tb_sys_menu;

-- 检查资源分类
SELECT * FROM tb_resource_category;

-- 检查系统配置
SELECT * FROM tb_sys_config;

-- 检查AI配置
SELECT * FROM tb_ai_agent_config;
```

## 默认账号信息

### 管理员账号

- **用户名**: admin
- **密码**: 对应的bcrypt哈希值已在SQL中，原始密码请查看 createTableUser.sql 文件
- **邮箱**: 3223905473@qq.com
- **角色**: 管理员
- **部门**: 超级部门

## 常见问题

### Q1: 执行脚本时提示 "Access denied"

**原因**: MySQL用户权限不足

**解决方案**:
1. 确保使用的MySQL账号有创建数据库和表的权限
2. 使用root账号或具有足够权限的账号

### Q2: 执行脚本时提示 "Table already exists"

**原因**: 表已存在

**解决方案**:
1. 如果要重新初始化，先删除数据库：
   ```sql
   DROP DATABASE IF EXISTS school_news;
   ```
2. 然后重新执行初始化脚本

### Q3: 中文乱码问题

**原因**: 字符集配置问题

**解决方案**:
1. 确保MySQL服务器配置了UTF-8字符集
2. 在my.cnf或my.ini中添加：
   ```ini
   [client]
   default-character-set=utf8mb4
   
   [mysql]
   default-character-set=utf8mb4
   
   [mysqld]
   character-set-server=utf8mb4
   collation-server=utf8mb4_general_ci
   ```
3. 重启MySQL服务

### Q4: Windows脚本执行时中文显示乱码

**原因**: 命令行编码问题

**解决方案**:
1. 脚本已包含 `chcp 65001` 命令切换为UTF-8编码
2. 如果仍有问题，可以在命令行中手动执行：
   ```cmd
   chcp 65001
   ```

### Q5: Linux脚本没有执行权限

**原因**: 文件权限问题

**解决方案**:
```bash
chmod +x init-database.sh
```

### Q6: 执行时提示 "mysql: command not found"

**原因**: MySQL客户端未安装或不在PATH中

**解决方案**:

**Windows**:
1. 将MySQL的bin目录添加到系统PATH
2. 或使用完整路径执行，例如：
   ```cmd
   "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -u root -p
   ```

**Linux/Mac**:
1. 安装MySQL客户端：
   ```bash
   # Ubuntu/Debian
   sudo apt-get install mysql-client
   
   # CentOS/RHEL
   sudo yum install mysql
   
   # Mac
   brew install mysql-client
   ```

## 数据库连接配置

### JDBC连接字符串

```
jdbc:mysql://localhost:3306/school_news?useUnicode=true&characterEncoding=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
```

### 配置参数说明

- `useUnicode=true`: 使用Unicode字符集
- `characterEncoding=utf8mb4`: 使用UTF-8编码，支持表情符号
- `useSSL=false`: 禁用SSL（开发环境）
- `serverTimezone=Asia/Shanghai`: 设置时区
- `allowPublicKeyRetrieval=true`: 允许客户端从服务器获取公钥

## 备份与恢复

### 备份数据库

```bash
mysqldump -u root -p school_news > school_news_backup.sql
```

### 恢复数据库

```bash
mysql -u root -p school_news < school_news_backup.sql
```

### 备份单个表

```bash
mysqldump -u root -p school_news tb_sys_user > user_backup.sql
```

## 性能优化建议

### 1. 配置MySQL参数

在 my.cnf 或 my.ini 中：

```ini
[mysqld]
# InnoDB缓冲池大小（建议设置为服务器内存的50-80%）
innodb_buffer_pool_size = 1G

# 连接数
max_connections = 500

# 查询缓存（MySQL 8.0已移除）
# query_cache_size = 64M

# 日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
```

### 2. 定期维护

```sql
-- 分析表
ANALYZE TABLE tb_resource;

-- 优化表
OPTIMIZE TABLE tb_learning_record;

-- 修复表
REPAIR TABLE tb_sys_user;
```

### 3. 监控慢查询

```sql
-- 查看慢查询日志
SHOW VARIABLES LIKE 'slow_query_log%';

-- 查看长时间查询
SHOW PROCESSLIST;
```

## 数据迁移

### 从测试环境迁移到生产环境

1. **导出测试环境数据**
   ```bash
   mysqldump -u root -p --single-transaction --quick school_news > school_news_test.sql
   ```

2. **在生产环境创建数据库**
   ```bash
   mysql -u root -p < createDB.sql
   ```

3. **导入数据**
   ```bash
   mysql -u root -p school_news < school_news_test.sql
   ```

4. **验证数据**
   ```sql
   USE school_news;
   SELECT COUNT(*) FROM tb_sys_user;
   -- 验证其他关键表
   ```

## 开发规范

### 1. 表命名规范
- 系统表：`tb_sys_` 前缀
- 业务表：`tb_` + 业务名
- 关联表：`tb_` + 表名1 + `_` + 表名2

### 2. 字段命名规范
- 使用小写字母和下划线
- 主键统一使用 `id`
- 外键使用 `表名_id`
- 布尔值使用 `is_` 前缀
- 时间字段使用 `_time` 后缀

### 3. 索引命名规范
- 主键：`pk_表名`（默认）
- 唯一索引：`uk_字段名`
- 普通索引：`idx_字段名`
- 组合索引：`idx_字段1_字段2`

### 4. 注释规范
- 所有表必须有注释
- 所有字段必须有注释
- 注释使用中文，简洁明了

## 文档说明

- **README.md**: 详细的表结构说明文档
- **表结构汇总.md**: 所有表的汇总列表
- **ER关系图.md**: 表关系图（Mermaid格式）
- **使用说明.md**: 本文件，使用指南

## 技术支持

如遇到问题，请检查：
1. MySQL版本是否为5.7或更高
2. 字符集是否为utf8mb4
3. 是否有足够的权限
4. SQL文件是否完整

## 更新日志

### v1.0.0 (2025-10-15)
- 初始版本
- 创建49张表
- 包含8个功能模块
- 添加默认数据和配置

