add_study_unique_constraint.sql 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. -- =============================================
  2. -- 添加 study_info 表的唯一约束
  3. -- 确保同一机构不会有相同的 study_instance_uid
  4. -- 日期:2025-12-30
  5. -- =============================================
  6. USE qconline;
  7. -- =============================================
  8. -- 第一步:查看当前重复数据
  9. -- =============================================
  10. SELECT '=== 检查是否有重复的 study_instance_uid ===' AS '';
  11. SELECT
  12. institution_id,
  13. study_instance_uid,
  14. COUNT(*) as count,
  15. GROUP_CONCAT(study_id) as study_ids,
  16. GROUP_CONCAT(id) as ids,
  17. MIN(create_time) as first_created,
  18. MAX(create_time) as last_created
  19. FROM study_info
  20. GROUP BY institution_id, study_instance_uid
  21. HAVING COUNT(*) > 1;
  22. -- =============================================
  23. -- 第二步:添加唯一约束
  24. -- =============================================
  25. SELECT '=== 添加唯一约束 ===' AS '';
  26. -- 删除可能存在的旧约束(如果有)
  27. ALTER TABLE study_info DROP INDEX IF EXISTS uk_study_instance;
  28. -- 添加新的唯一约束(institution_id + study_instance_uid)
  29. ALTER TABLE study_info ADD UNIQUE KEY uk_study_instance (institution_id, study_instance_uid);
  30. -- =============================================
  31. -- 第三步:验证约束
  32. -- =============================================
  33. SELECT '=== 验证约束是否添加成功 ===' AS '';
  34. SHOW INDEX FROM study_info WHERE Key_name = 'uk_study_instance';
  35. -- =============================================
  36. -- 说明
  37. -- =============================================
  38. /*
  39. 1. 约束说明:
  40. - 约束名称:uk_study_instance
  41. - 约束字段:institution_id + study_instance_uid
  42. - 作用:防止同一机构产生重复的 study_instance_uid 记录
  43. 2. 如果执行失败:
  44. - 说明存在重复数据,需要先执行清理脚本(见 cleanup_duplicate_studies.sql)
  45. - 清理完成后再执行本脚本
  46. 3. 代码层面的处理:
  47. - uploadAndParse(): 使用 selectList 检查,取第一条并警告
  48. - processStudyWithTransaction(): 使用 selectList 检查,更新已存在记录
  49. - 如果检测到多条记录,会在日志中记录警告
  50. 4. 建议:
  51. - 执行本脚本前,先查看重复数据
  52. - 确认重复数据是否需要保留
  53. - 如果不需要,执行清理脚本
  54. */