1
0

migration_token_usage_count.sql 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. -- ====================================================================
  2. -- Token使用次数统计功能数据库迁移脚本
  3. -- ====================================================================
  4. -- 版本: v1.0
  5. -- 创建日期: 2025-08-25
  6. -- 作者: Assistant
  7. -- 描述: 为tokens表添加使用次数统计功能的相关字段
  8. --
  9. -- 新增字段:
  10. -- - daily_usage_count: 今日使用次数,每日自动重置
  11. -- - total_usage_count: 总使用次数,只增不减
  12. -- - last_usage_date: 最后使用日期,用于判断是否需要重置今日次数
  13. -- ====================================================================
  14. -- ====================================================================
  15. -- 向前迁移 (UP) - 添加字段
  16. -- ====================================================================
  17. -- MySQL 数据库
  18. -- 检查字段是否已存在,避免重复添加
  19. SET @sql_daily = 'ALTER TABLE tokens ADD COLUMN daily_usage_count INT NOT NULL DEFAULT 0 COMMENT ''今日使用次数''';
  20. SET @sql_total = 'ALTER TABLE tokens ADD COLUMN total_usage_count INT NOT NULL DEFAULT 0 COMMENT ''总使用次数''';
  21. SET @sql_date = 'ALTER TABLE tokens ADD COLUMN last_usage_date VARCHAR(10) NOT NULL DEFAULT '''' COMMENT ''最后使用日期(YYYY-MM-DD)''';
  22. -- 执行添加字段的SQL (仅在字段不存在时执行)
  23. PREPARE stmt FROM @sql_daily;
  24. EXECUTE stmt;
  25. DEALLOCATE PREPARE stmt;
  26. PREPARE stmt FROM @sql_total;
  27. EXECUTE stmt;
  28. DEALLOCATE PREPARE stmt;
  29. PREPARE stmt FROM @sql_date;
  30. EXECUTE stmt;
  31. DEALLOCATE PREPARE stmt;
  32. -- 为新字段添加索引 (可选,提升查询性能)
  33. -- CREATE INDEX idx_tokens_last_usage_date ON tokens(last_usage_date);
  34. -- CREATE INDEX idx_tokens_total_usage_count ON tokens(total_usage_count);
  35. -- ====================================================================
  36. -- PostgreSQL 数据库 (如果使用PostgreSQL,取消下面注释)
  37. -- ====================================================================
  38. /*
  39. -- 添加字段
  40. ALTER TABLE tokens ADD COLUMN IF NOT EXISTS daily_usage_count INTEGER NOT NULL DEFAULT 0;
  41. ALTER TABLE tokens ADD COLUMN IF NOT EXISTS total_usage_count INTEGER NOT NULL DEFAULT 0;
  42. ALTER TABLE tokens ADD COLUMN IF NOT EXISTS last_usage_date VARCHAR(10) NOT NULL DEFAULT '';
  43. -- 添加注释
  44. COMMENT ON COLUMN tokens.daily_usage_count IS '今日使用次数';
  45. COMMENT ON COLUMN tokens.total_usage_count IS '总使用次数';
  46. COMMENT ON COLUMN tokens.last_usage_date IS '最后使用日期(YYYY-MM-DD)';
  47. -- 添加索引 (可选)
  48. -- CREATE INDEX IF NOT EXISTS idx_tokens_last_usage_date ON tokens(last_usage_date);
  49. -- CREATE INDEX IF NOT EXISTS idx_tokens_total_usage_count ON tokens(total_usage_count);
  50. */
  51. -- ====================================================================
  52. -- SQLite 数据库 (如果使用SQLite,取消下面注释)
  53. -- ====================================================================
  54. /*
  55. -- SQLite不支持IF NOT EXISTS语法,需要手动检查
  56. -- 添加字段
  57. ALTER TABLE tokens ADD COLUMN daily_usage_count INTEGER NOT NULL DEFAULT 0;
  58. ALTER TABLE tokens ADD COLUMN total_usage_count INTEGER NOT NULL DEFAULT 0;
  59. ALTER TABLE tokens ADD COLUMN last_usage_date TEXT NOT NULL DEFAULT '';
  60. -- 添加索引 (可选)
  61. -- CREATE INDEX IF NOT EXISTS idx_tokens_last_usage_date ON tokens(last_usage_date);
  62. -- CREATE INDEX IF NOT EXISTS idx_tokens_total_usage_count ON tokens(total_usage_count);
  63. */
  64. -- ====================================================================
  65. -- 向后迁移 (DOWN) - 删除字段 (回滚操作)
  66. -- ====================================================================
  67. /*
  68. -- 如果需要回滚,请执行以下SQL语句
  69. -- MySQL 回滚
  70. ALTER TABLE tokens DROP COLUMN IF EXISTS daily_usage_count;
  71. ALTER TABLE tokens DROP COLUMN IF EXISTS total_usage_count;
  72. ALTER TABLE tokens DROP COLUMN IF EXISTS last_usage_date;
  73. -- PostgreSQL 回滚
  74. -- ALTER TABLE tokens DROP COLUMN IF EXISTS daily_usage_count;
  75. -- ALTER TABLE tokens DROP COLUMN IF EXISTS total_usage_count;
  76. -- ALTER TABLE tokens DROP COLUMN IF EXISTS last_usage_date;
  77. -- SQLite 回滚 (SQLite不支持DROP COLUMN,需要重建表)
  78. -- 1. 创建备份表
  79. -- CREATE TABLE tokens_backup AS SELECT id, user_id, key, status, name, created_time, accessed_time, expired_time, remain_quota, unlimited_quota, model_limits_enabled, model_limits, allow_ips, used_quota, group FROM tokens;
  80. -- 2. 删除原表
  81. -- DROP TABLE tokens;
  82. -- 3. 重命名备份表
  83. -- ALTER TABLE tokens_backup RENAME TO tokens;
  84. */
  85. -- ====================================================================
  86. -- 验证脚本 - 检查字段是否成功添加
  87. -- ====================================================================
  88. /*
  89. -- 检查字段是否存在 (MySQL)
  90. SELECT
  91. COLUMN_NAME,
  92. DATA_TYPE,
  93. IS_NULLABLE,
  94. COLUMN_DEFAULT,
  95. COLUMN_COMMENT
  96. FROM INFORMATION_SCHEMA.COLUMNS
  97. WHERE TABLE_SCHEMA = DATABASE()
  98. AND TABLE_NAME = 'tokens'
  99. AND COLUMN_NAME IN ('daily_usage_count', 'total_usage_count', 'last_usage_date');
  100. -- 检查字段是否存在 (PostgreSQL)
  101. -- SELECT column_name, data_type, is_nullable, column_default
  102. -- FROM information_schema.columns
  103. -- WHERE table_name = 'tokens'
  104. -- AND column_name IN ('daily_usage_count', 'total_usage_count', 'last_usage_date');
  105. -- 检查字段是否存在 (SQLite)
  106. -- PRAGMA table_info(tokens);
  107. */
  108. -- ====================================================================
  109. -- 使用说明
  110. -- ====================================================================
  111. /*
  112. 1. 根据您的数据库类型,选择对应的SQL语句执行
  113. 2. 默认启用MySQL语法,如使用其他数据库请取消相应注释
  114. 3. 建议在执行前备份数据库
  115. 4. 执行后可运行验证脚本确认字段添加成功
  116. 5. 如需回滚,请执行"向后迁移"部分的SQL语句
  117. 新字段说明:
  118. - daily_usage_count: 记录Token今日使用次数,每天首次使用时重置
  119. - total_usage_count: 记录Token总使用次数,永不重置
  120. - last_usage_date: 记录最后使用日期,格式为YYYY-MM-DD,用于判断是否跨天
  121. 这些字段会在Token被使用时自动更新,无需手动维护。
  122. */