From c1ac3a9fedca3111c06d5f55672d6074fbf5dd72 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 4 Jan 2026 11:52:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DMySQL=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E6=80=A7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/reward_system_upgrade.sql | 56 ++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 10 deletions(-) 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 (