-- ============================================ -- 多身份功能 - 数据库脚本 -- 创建时间: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;