| 123456789101112131415161718192021222324252627282930 |
- -- 用户-软件订阅表:支持多软件共用一套用户表,每个用户在每个软件下独立卡密/到期时间
- -- 执行前请确认 software 表已存在且存在 code='buff-xp-steam-sh' 的记录
- CREATE TABLE IF NOT EXISTS `user_software_subscription` (
- `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `user_id` int NOT NULL COMMENT '用户ID',
- `software_id` int NOT NULL COMMENT '软件ID',
- `card_id` int DEFAULT NULL COMMENT '当前卡密ID',
- `expire_time` datetime DEFAULT NULL COMMENT '到期时间',
- `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除: 0-否, 1-是',
- `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (`id`),
- UNIQUE KEY `uq_user_software` (`user_id`,`software_id`),
- KEY `idx_user_software_subscription_user_id` (`user_id`),
- KEY `idx_user_software_subscription_software_id` (`software_id`),
- KEY `idx_user_software_subscription_expire_time` (`expire_time`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户软件订阅:多软件共用用户表时,每用户每软件一条';
- -- 将现有用户的 card_id/expire_time 迁移到订阅表(默认归属 buff-xp-steam-sh)
- INSERT INTO `user_software_subscription` (`user_id`, `software_id`, `card_id`, `expire_time`, `is_deleted`, `created_at`, `updated_at`)
- SELECT u.`id`, s.`id`, u.`card_id`, u.`expire_time`, 0, NOW(), NOW()
- FROM `users` u
- CROSS JOIN (SELECT `id` FROM `software` WHERE `code` = 'buff-xp-steam-sh' AND `is_deleted` = 0 LIMIT 1) s
- WHERE u.`is_deleted` = 0
- AND (u.`card_id` IS NOT NULL OR u.`expire_time` IS NOT NULL)
- AND NOT EXISTS (
- SELECT 1 FROM `user_software_subscription` sub
- WHERE sub.`user_id` = u.`id` AND sub.`software_id` = s.`id`
- );
|