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