-- ===================================================== -- 封禁系统数据库表结构 -- 包含用户封禁、房间封禁功能 -- ===================================================== -- 1. 用户封禁表(管理员对用户的封禁) CREATE TABLE IF NOT EXISTS `eb_user_ban` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` int(11) NOT NULL COMMENT '被封禁的用户ID', `ban_type` varchar(20) NOT NULL DEFAULT 'permanent' COMMENT '封禁类型:permanent-永久, temporary-临时', `reason` varchar(500) DEFAULT '' COMMENT '封禁原因', `duration_days` int(11) DEFAULT NULL COMMENT '封禁天数(临时封禁时使用)', `expire_time` datetime DEFAULT NULL COMMENT '封禁到期时间(临时封禁时使用)', `operator_id` int(11) DEFAULT 0 COMMENT '操作人ID(管理员)', `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态:1-生效中, 0-已解除', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_status` (`status`), KEY `idx_expire_time` (`expire_time`), KEY `idx_create_time` (`create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户封禁记录表'; -- 2. 房间封禁表(管理员对直播间的封禁) CREATE TABLE IF NOT EXISTS `eb_room_ban` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `room_id` int(11) NOT NULL COMMENT '被封禁的房间ID', `ban_type` varchar(20) NOT NULL DEFAULT 'permanent' COMMENT '封禁类型:permanent-永久, temporary-临时', `reason` varchar(500) DEFAULT '' COMMENT '封禁原因', `duration_days` int(11) DEFAULT NULL COMMENT '封禁天数(临时封禁时使用)', `expire_time` datetime DEFAULT NULL COMMENT '封禁到期时间(临时封禁时使用)', `operator_id` int(11) DEFAULT 0 COMMENT '操作人ID(管理员)', `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态:1-生效中, 0-已解除', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_room_id` (`room_id`), KEY `idx_status` (`status`), KEY `idx_expire_time` (`expire_time`), KEY `idx_create_time` (`create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='房间封禁记录表'; -- 3. 确保用户黑名单表存在(用户间的拉黑) CREATE TABLE IF NOT EXISTS `eb_user_blacklist` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` int(11) NOT NULL COMMENT '用户ID(发起拉黑的用户)', `blocked_user_id` int(11) NOT NULL COMMENT '被拉黑的用户ID', `blocker_nickname` varchar(100) DEFAULT '' COMMENT '拉黑者昵称', `blocker_avatar` varchar(500) DEFAULT '' COMMENT '拉黑者头像', `blocked_nickname` varchar(100) DEFAULT '' COMMENT '被拉黑者昵称', `blocked_avatar` varchar(500) DEFAULT '' COMMENT '被拉黑者头像', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_blocked` (`user_id`, `blocked_user_id`), KEY `idx_user_id` (`user_id`), KEY `idx_blocked_user_id` (`blocked_user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户黑名单表'; -- 4. 确保房间黑名单表存在(直播间对用户的拉黑) CREATE TABLE IF NOT EXISTS `eb_room_blacklist` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `room_id` int(11) NOT NULL COMMENT '房间ID', `room_name` varchar(200) DEFAULT '' COMMENT '房间名称', `blocked_user_id` int(11) NOT NULL COMMENT '被拉黑的用户ID', `blocked_user_nickname` varchar(100) DEFAULT '' COMMENT '被拉黑用户昵称', `blocked_user_avatar` varchar(500) DEFAULT '' COMMENT '被拉黑用户头像', `reason` varchar(500) DEFAULT '' COMMENT '拉黑原因', `operator_id` int(11) DEFAULT 0 COMMENT '操作人ID(主播或管理员)', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_room_user` (`room_id`, `blocked_user_id`), KEY `idx_room_id` (`room_id`), KEY `idx_blocked_user_id` (`blocked_user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='房间黑名单表'; -- 5. 添加测试数据 -- 用户封禁测试数据 INSERT IGNORE INTO eb_user_ban (user_id, ban_type, reason, duration_days, operator_id, status) VALUES (999, 'permanent', '违规发布不良内容', NULL, 1, 1), (998, 'temporary', '多次发送垃圾信息', 7, 1, 1); -- 更新临时封禁的到期时间 UPDATE eb_user_ban SET expire_time = DATE_ADD(create_time, INTERVAL duration_days DAY) WHERE ban_type = 'temporary' AND duration_days IS NOT NULL AND expire_time IS NULL; -- 6. 验证表结构 SELECT '=== 封禁系统表结构 ===' as info; SHOW TABLES LIKE 'eb_%ban%'; SHOW TABLES LIKE 'eb_%blacklist%'; SELECT '=== 用户封禁记录 ===' as info; SELECT * FROM eb_user_ban ORDER BY create_time DESC LIMIT 5; SELECT '=== 房间封禁记录 ===' as info; SELECT * FROM eb_room_ban ORDER BY create_time DESC LIMIT 5; SELECT '=== 用户黑名单 ===' as info; SELECT * FROM eb_user_blacklist ORDER BY create_time DESC LIMIT 5; SELECT '=== 房间黑名单 ===' as info; SELECT * FROM eb_room_blacklist ORDER BY create_time DESC LIMIT 5;