fix-prod-schema.sql 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. -- ============================================================
  2. -- 线上库 schema 补齐脚本(2026-08-31)
  3. -- 背景:线上已部署新代码(含 question_count / practiceProgress 功能),
  4. -- 但线上库 schema 落后,缺列缺表导致多个接口 500。
  5. -- 用法:先把本文件上传到服务器 /root/,然后执行:
  6. -- docker exec -i mysql8 mysql -uuser -p'qPa5*gt8o.' zhijiayun_pharmacy < /root/fix-prod-schema.sql
  7. -- 说明:
  8. -- - 第 1 条 ALTER 若报 "Duplicate column name 'question_count'",说明列已加过,
  9. -- 属正常现象,忽略即可(用 -f 或继续执行后续语句)。
  10. -- - CREATE TABLE IF NOT EXISTS 可安全重复执行。
  11. -- ============================================================
  12. -- 1) 考试记录表:满分列(realExam/list、records、summary、recordDetail 等接口依赖)
  13. ALTER TABLE t_quiz_user_exam_record
  14. ADD COLUMN question_count INT DEFAULT NULL COMMENT '试卷题目总数(满分)' AFTER wrong_count;
  15. -- 2) 练习进度表(practiceProgress/listBySectionIds、save、get 接口依赖)
  16. CREATE TABLE IF NOT EXISTS t_quiz_practice_progress (
  17. id bigint NOT NULL COMMENT '主键ID(雪花算法)',
  18. user_id bigint NOT NULL COMMENT '用户ID',
  19. subject_id bigint DEFAULT NULL COMMENT '科目ID',
  20. section_id bigint NOT NULL COMMENT '节ID',
  21. section_name varchar(200) DEFAULT NULL COMMENT '节名称',
  22. current_index int NOT NULL DEFAULT 0 COMMENT '当前题号(0基)',
  23. answered_count int NOT NULL DEFAULT 0 COMMENT '已答题数',
  24. answers text COMMENT '已选答案JSON {index:答案}',
  25. create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  26. update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  27. PRIMARY KEY (id),
  28. UNIQUE KEY uk_user_section (user_id, section_id),
  29. KEY idx_user_id (user_id)
  30. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='练习进度表';
  31. -- 3) 回填存量考试记录的满分值
  32. UPDATE t_quiz_user_exam_record r
  33. SET r.question_count = (
  34. SELECT COUNT(*) FROM t_quiz_question q
  35. WHERE q.is_real = 1 AND q.year = r.year
  36. AND (r.subject_id IS NULL OR q.subject_id = r.subject_id)
  37. )
  38. WHERE r.question_count IS NULL;