peixue-dev/Archive/[一次性]手动执行SQL步骤-2026-02-28.md

165 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 手动执行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路径
- 最直观,可以看到执行过程
- 最可靠,不会有路径问题
执行完成后,告诉我结果,我们继续下一步!