-- xuchao: 积分系统——规则表 + 流水表(唯一键防刷) + 任务表加 points 列。全部幂等。 CREATE TABLE IF NOT EXISTS `point_rule` ( `id` bigint AUTO_INCREMENT NOT NULL, `event_type` varchar(30) NOT NULL, `points` int NOT NULL DEFAULT 0, `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT `point_rule_id` PRIMARY KEY(`id`), UNIQUE KEY `uq_point_rule_event` (`event_type`) ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS `point_log` ( `id` bigint AUTO_INCREMENT NOT NULL, `child_user_id` bigint NOT NULL, `event_type` varchar(30) NOT NULL, `ref_key` varchar(100) NOT NULL, `points` int NOT NULL, `remark` varchar(200) NOT NULL DEFAULT '', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT `point_log_id` PRIMARY KEY(`id`), UNIQUE KEY `uq_point_log_dedup` (`child_user_id`, `event_type`, `ref_key`), KEY `idx_point_log_child` (`child_user_id`) ); --> statement-breakpoint SET @has_tpl_points = (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'task_template' AND column_name = 'points'); --> statement-breakpoint SET @ddl = IF(@has_tpl_points = 0, 'ALTER TABLE `task_template` ADD COLUMN `points` int NOT NULL DEFAULT 10', 'SELECT 1'); --> statement-breakpoint PREPARE stmt FROM @ddl; --> statement-breakpoint EXECUTE stmt; --> statement-breakpoint DEALLOCATE PREPARE stmt; --> statement-breakpoint SET @has_inst_points = (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'task_instance' AND column_name = 'points'); --> statement-breakpoint SET @ddl2 = IF(@has_inst_points = 0, 'ALTER TABLE `task_instance` ADD COLUMN `points` int NOT NULL DEFAULT 10', 'SELECT 1'); --> statement-breakpoint PREPARE stmt2 FROM @ddl2; --> statement-breakpoint EXECUTE stmt2; --> statement-breakpoint DEALLOCATE PREPARE stmt2;