diff --git a/database/reward_system_upgrade.sql b/database/reward_system_upgrade.sql index 01f8850..b885a5c 100644 --- a/database/reward_system_upgrade.sql +++ b/database/reward_system_upgrade.sql @@ -20,16 +20,52 @@ CREATE TABLE IF NOT EXISTS reward_record ( INDEX idx_reward_type (reward_type) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='奖励发放记录'; --- 2. 扩展奖励规则表 -ALTER TABLE reward_rule ADD COLUMN IF NOT EXISTS reward_exp INT DEFAULT 0 COMMENT '奖励经验值'; -ALTER TABLE reward_rule ADD COLUMN IF NOT EXISTS reward_title VARCHAR(50) COMMENT '奖励称号'; -ALTER TABLE reward_rule ADD COLUMN IF NOT EXISTS reward_privilege TEXT COMMENT '奖励特权JSON'; -ALTER TABLE reward_rule ADD COLUMN IF NOT EXISTS max_times_per_user INT DEFAULT 0 COMMENT '每用户最大获得次数(0=无限)'; -ALTER TABLE reward_rule ADD COLUMN IF NOT EXISTS total_budget INT DEFAULT 0 COMMENT '总预算积分(0=无限)'; -ALTER TABLE reward_rule ADD COLUMN IF NOT EXISTS used_budget INT DEFAULT 0 COMMENT '已使用预算'; -ALTER TABLE reward_rule ADD COLUMN IF NOT EXISTS trigger_count INT DEFAULT 0 COMMENT '触发次数'; -ALTER TABLE reward_rule ADD COLUMN IF NOT EXISTS start_time DATETIME COMMENT '生效开始时间'; -ALTER TABLE reward_rule ADD COLUMN IF NOT EXISTS end_time DATETIME COMMENT '生效结束时间'; +-- 2. 扩展奖励规则表(忽略已存在的列错误) +-- 使用存储过程安全添加列 +DELIMITER // +DROP PROCEDURE IF EXISTS add_column_if_not_exists// +CREATE PROCEDURE add_column_if_not_exists() +BEGIN + -- reward_exp + IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'reward_rule' AND COLUMN_NAME = 'reward_exp') THEN + ALTER TABLE reward_rule ADD COLUMN reward_exp INT DEFAULT 0 COMMENT '奖励经验值'; + END IF; + -- reward_title + IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'reward_rule' AND COLUMN_NAME = 'reward_title') THEN + ALTER TABLE reward_rule ADD COLUMN reward_title VARCHAR(50) COMMENT '奖励称号'; + END IF; + -- reward_privilege + IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'reward_rule' AND COLUMN_NAME = 'reward_privilege') THEN + ALTER TABLE reward_rule ADD COLUMN reward_privilege TEXT COMMENT '奖励特权JSON'; + END IF; + -- max_times_per_user + IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'reward_rule' AND COLUMN_NAME = 'max_times_per_user') THEN + ALTER TABLE reward_rule ADD COLUMN max_times_per_user INT DEFAULT 0 COMMENT '每用户最大获得次数(0=无限)'; + END IF; + -- total_budget + IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'reward_rule' AND COLUMN_NAME = 'total_budget') THEN + ALTER TABLE reward_rule ADD COLUMN total_budget INT DEFAULT 0 COMMENT '总预算积分(0=无限)'; + END IF; + -- used_budget + IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'reward_rule' AND COLUMN_NAME = 'used_budget') THEN + ALTER TABLE reward_rule ADD COLUMN used_budget INT DEFAULT 0 COMMENT '已使用预算'; + END IF; + -- trigger_count + IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'reward_rule' AND COLUMN_NAME = 'trigger_count') THEN + ALTER TABLE reward_rule ADD COLUMN trigger_count INT DEFAULT 0 COMMENT '触发次数'; + END IF; + -- start_time + IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'reward_rule' AND COLUMN_NAME = 'start_time') THEN + ALTER TABLE reward_rule ADD COLUMN start_time DATETIME COMMENT '生效开始时间'; + END IF; + -- end_time + IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'reward_rule' AND COLUMN_NAME = 'end_time') THEN + ALTER TABLE reward_rule ADD COLUMN end_time DATETIME COMMENT '生效结束时间'; + END IF; +END// +DELIMITER ; +CALL add_column_if_not_exists(); +DROP PROCEDURE IF EXISTS add_column_if_not_exists; -- 3. 用户徽章表 CREATE TABLE IF NOT EXISTS user_badge (