package com.rongyichuang.tools; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.jdbc.core.JdbcTemplate; import java.util.List; import java.util.Map; @SpringBootTest public class ActivityPlayerRegionUpdater { @Autowired private JdbcTemplate jdbcTemplate; @Test public void addRegionFieldToActivityPlayer() { System.out.println("=== 为 t_activity_player 表添加 region_id 字段 ==="); try { // 1. 检查字段是否已存在 String checkColumnSql = """ SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_activity_player' AND COLUMN_NAME = 'region_id' """; List> existingColumns = jdbcTemplate.queryForList(checkColumnSql); if (!existingColumns.isEmpty()) { System.out.println("✅ region_id 字段已存在,无需添加"); return; } // 2. 添加 region_id 字段 String addColumnSql = """ ALTER TABLE t_activity_player ADD COLUMN region_id bigint DEFAULT NULL COMMENT '区域ID,关联t_region表' AFTER player_id """; jdbcTemplate.execute(addColumnSql); System.out.println("✅ 成功添加 region_id 字段"); // 3. 添加外键约束 try { String addForeignKeySql = """ ALTER TABLE t_activity_player ADD CONSTRAINT fk_activity_player_region FOREIGN KEY (region_id) REFERENCES t_region(id) ON DELETE SET NULL ON UPDATE CASCADE """; jdbcTemplate.execute(addForeignKeySql); System.out.println("✅ 成功添加外键约束"); } catch (Exception e) { System.out.println("⚠️ 外键约束添加失败(可能已存在): " + e.getMessage()); } // 4. 验证表结构 String describeTableSql = """ SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_activity_player' ORDER BY ORDINAL_POSITION """; List> columns = jdbcTemplate.queryForList(describeTableSql); System.out.println("\n=== t_activity_player 表结构 ==="); for (Map column : columns) { System.out.println(String.format("%-20s %-15s %-10s %-15s %s", column.get("COLUMN_NAME"), column.get("DATA_TYPE"), column.get("IS_NULLABLE"), column.get("COLUMN_DEFAULT"), column.get("COLUMN_COMMENT") )); } } catch (Exception e) { System.err.println("❌ 操作失败: " + e.getMessage()); e.printStackTrace(); } System.out.println("\n✅ region_id 字段添加完成!"); } }