| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- -- =============================================
- -- 添加 study_info 表的唯一约束
- -- 确保同一机构不会有相同的 study_instance_uid
- -- 日期:2025-12-30
- -- =============================================
- USE qconline;
- -- =============================================
- -- 第一步:查看当前重复数据
- -- =============================================
- SELECT '=== 检查是否有重复的 study_instance_uid ===' AS '';
- SELECT
- institution_id,
- study_instance_uid,
- COUNT(*) as count,
- GROUP_CONCAT(study_id) as study_ids,
- GROUP_CONCAT(id) as ids,
- MIN(create_time) as first_created,
- MAX(create_time) as last_created
- FROM study_info
- GROUP BY institution_id, study_instance_uid
- HAVING COUNT(*) > 1;
- -- =============================================
- -- 第二步:添加唯一约束
- -- =============================================
- SELECT '=== 添加唯一约束 ===' AS '';
- -- 删除可能存在的旧约束(如果有)
- ALTER TABLE study_info DROP INDEX IF EXISTS uk_study_instance;
- -- 添加新的唯一约束(institution_id + study_instance_uid)
- ALTER TABLE study_info ADD UNIQUE KEY uk_study_instance (institution_id, study_instance_uid);
- -- =============================================
- -- 第三步:验证约束
- -- =============================================
- SELECT '=== 验证约束是否添加成功 ===' AS '';
- SHOW INDEX FROM study_info WHERE Key_name = 'uk_study_instance';
- -- =============================================
- -- 说明
- -- =============================================
- /*
- 1. 约束说明:
- - 约束名称:uk_study_instance
- - 约束字段:institution_id + study_instance_uid
- - 作用:防止同一机构产生重复的 study_instance_uid 记录
- 2. 如果执行失败:
- - 说明存在重复数据,需要先执行清理脚本(见 cleanup_duplicate_studies.sql)
- - 清理完成后再执行本脚本
- 3. 代码层面的处理:
- - uploadAndParse(): 使用 selectList 检查,取第一条并警告
- - processStudyWithTransaction(): 使用 selectList 检查,更新已存在记录
- - 如果检测到多条记录,会在日志中记录警告
- 4. 建议:
- - 执行本脚本前,先查看重复数据
- - 确认重复数据是否需要保留
- - 如果不需要,执行清理脚本
- */
|