165 lines
4.2 KiB
Markdown
165 lines
4.2 KiB
Markdown
# 手动执行SQL - 创建user_roles表
|
||
|
||
> 如果批处理脚本无法执行,请按照以下步骤手动执行
|
||
|
||
---
|
||
|
||
## 方法1:使用Navicat/DBeaver等数据库工具(推荐)
|
||
|
||
### 步骤1:连接数据库
|
||
- 主机:115.190.64.57
|
||
- 端口:3306
|
||
- 用户名:root
|
||
- 密码:123456
|
||
- 数据库:peidu
|
||
|
||
### 步骤2:打开SQL文件
|
||
打开文件:`D:\peixu-main\peixu\Archive\[一次性]创建user_roles表-2026-02-28.sql`
|
||
|
||
### 步骤3:执行SQL
|
||
点击"运行"或"执行"按钮
|
||
|
||
### 步骤4:验证
|
||
执行以下SQL验证:
|
||
```sql
|
||
-- 检查表是否创建成功
|
||
SHOW TABLES LIKE 'user_roles';
|
||
|
||
-- 查看数据
|
||
SELECT COUNT(*) FROM user_roles;
|
||
```
|
||
|
||
---
|
||
|
||
## 方法2:复制粘贴SQL(最简单)
|
||
|
||
### 步骤1:打开数据库工具
|
||
使用Navicat、DBeaver、MySQL Workbench等任意工具
|
||
|
||
### 步骤2:连接到数据库
|
||
- 主机:115.190.64.57
|
||
- 端口:3306
|
||
- 用户名:root
|
||
- 密码:123456
|
||
- 数据库:peidu
|
||
|
||
### 步骤3:复制以下SQL并执行
|
||
|
||
```sql
|
||
-- ============================================
|
||
-- 多身份功能 - 数据库脚本
|
||
-- 创建时间:2026-02-28
|
||
-- 功能:创建 user_roles 表,支持一个账号多个角色
|
||
-- ============================================
|
||
|
||
-- 1. 创建 user_roles 表
|
||
CREATE TABLE IF NOT EXISTS `user_roles` (
|
||
`id` BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||
`user_id` BIGINT NOT NULL COMMENT '用户ID',
|
||
`role_type` VARCHAR(50) NOT NULL COMMENT '角色类型:teacher/manager/distributor/provider/parent',
|
||
`is_primary` TINYINT DEFAULT 0 COMMENT '是否主身份:0=否,1=是',
|
||
`status` TINYINT DEFAULT 1 COMMENT '状态:0=禁用,1=启用',
|
||
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
INDEX `idx_user_id` (`user_id`),
|
||
INDEX `idx_role_type` (`role_type`),
|
||
UNIQUE KEY `uk_user_role` (`user_id`, `role_type`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表';
|
||
|
||
-- 2. 初始化数据:将现有用户的主身份同步到 user_roles 表
|
||
INSERT INTO `user_roles` (`user_id`, `role_type`, `is_primary`, `status`)
|
||
SELECT
|
||
`id` as user_id,
|
||
`role` as role_type,
|
||
1 as is_primary,
|
||
1 as status
|
||
FROM `user`
|
||
WHERE `role` IS NOT NULL AND `role` != ''
|
||
ON DUPLICATE KEY UPDATE `is_primary` = 1;
|
||
|
||
-- 3. 验证数据
|
||
SELECT
|
||
'数据同步完成' as message,
|
||
COUNT(*) as total_users,
|
||
COUNT(DISTINCT user_id) as users_with_roles
|
||
FROM user_roles;
|
||
|
||
-- 4. 查看前10条数据
|
||
SELECT
|
||
u.id,
|
||
u.phone,
|
||
u.role as primary_role,
|
||
GROUP_CONCAT(ur.role_type) as all_roles,
|
||
GROUP_CONCAT(IF(ur.is_primary = 1, '✓', '')) as primary_mark
|
||
FROM user u
|
||
LEFT JOIN user_roles ur ON u.id = ur.user_id
|
||
GROUP BY u.id
|
||
LIMIT 10;
|
||
```
|
||
|
||
### 步骤4:查看执行结果
|
||
如果看到类似以下输出,说明执行成功:
|
||
```
|
||
message: 数据同步完成
|
||
total_users: 100
|
||
users_with_roles: 100
|
||
```
|
||
|
||
---
|
||
|
||
## 方法3:找到MySQL安装路径
|
||
|
||
### 步骤1:查找MySQL安装位置
|
||
常见路径:
|
||
- `C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe`
|
||
- `C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql.exe`
|
||
- `C:\xampp\mysql\bin\mysql.exe`
|
||
- `C:\wamp64\bin\mysql\mysql8.0.x\bin\mysql.exe`
|
||
|
||
### 步骤2:使用完整路径执行
|
||
```cmd
|
||
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -h 115.190.64.57 -P 3306 -u root -p123456 peidu < "D:\peixu-main\peixu\Archive\[一次性]创建user_roles表-2026-02-28.sql"
|
||
```
|
||
|
||
---
|
||
|
||
## ✅ 验证是否成功
|
||
|
||
执行以下SQL检查:
|
||
|
||
```sql
|
||
-- 1. 检查表是否存在
|
||
SHOW TABLES LIKE 'user_roles';
|
||
|
||
-- 2. 查看表结构
|
||
DESC user_roles;
|
||
|
||
-- 3. 查看数据量
|
||
SELECT COUNT(*) as total_records FROM user_roles;
|
||
|
||
-- 4. 查看前5条数据
|
||
SELECT * FROM user_roles LIMIT 5;
|
||
|
||
-- 5. 检查数据一致性
|
||
SELECT
|
||
u.id,
|
||
u.phone,
|
||
u.role as user_table_role,
|
||
ur.role_type as user_roles_table_role,
|
||
IF(u.role = ur.role_type, '✓ 一致', '✗ 不一致') as consistency
|
||
FROM user u
|
||
LEFT JOIN user_roles ur ON u.id = ur.user_id AND ur.is_primary = 1
|
||
LIMIT 10;
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 推荐方法
|
||
|
||
**我最推荐方法2(复制粘贴SQL)**,因为:
|
||
- 最简单,不需要找MySQL路径
|
||
- 最直观,可以看到执行过程
|
||
- 最可靠,不会有路径问题
|
||
|
||
执行完成后,告诉我结果,我们继续下一步!
|