精简测试数据.sql 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. -- =============================================================
  2. -- 时差项目 · 数据库测试数据精简脚本(开发用)
  3. -- 目的:库结构不动,只精简测试数据;按业务主线保留少量可关联的种子数据
  4. -- 默认参数:保留 3 个培养记录 + 关联链;设备流水留近 30 天;日志清空;配置字典全留
  5. -- 作者:依据 项目文档/需求文档/11-数据库测试数据精简方案.md 生成
  6. --
  7. -- ⚠️ 执行前务必:
  8. -- 1) 全量备份所有库(mysqldump)
  9. -- 2) 仅在【开发库】执行,不要碰生产
  10. -- 3) 先整段在测试库演练,确认系统能启动、能查到保留的病例完整链
  11. -- 4) 各库名按你的实际库名替换(下方用占位库名,已按模块分段)
  12. -- 说明:很多表无主外键,故用"保留集合临时表 + NOT IN 删除"保证不断链
  13. -- =============================================================
  14. -- ╔══════════════════════════════════════════════════════════╗
  15. -- ║ 第一部分:business 库(病例/胚胎/图片/视频/识别/标记) ║
  16. -- ║ USE aivfo_business; -- ← 改成你的实际业务库名 ║
  17. -- ╚══════════════════════════════════════════════════════════╝
  18. USE `aivfo_business`;
  19. SET SQL_SAFE_UPDATES = 0;
  20. START TRANSACTION;
  21. -- 1. 选种子根:保留最近 3 个培养记录(可改 WHERE/LIMIT 或手动指定 id)
  22. DROP TEMPORARY TABLE IF EXISTS keep_record;
  23. CREATE TEMPORARY TABLE keep_record (id BIGINT PRIMARY KEY);
  24. INSERT INTO keep_record(id)
  25. SELECT id FROM embryo_culture_record ORDER BY id DESC LIMIT 3;
  26. -- 如需覆盖不同状态,改用:按 state 各取若干,例如:
  27. -- INSERT INTO keep_record SELECT id FROM (
  28. -- (SELECT id FROM embryo_culture_record WHERE state=1 ORDER BY id DESC LIMIT 1)
  29. -- UNION (SELECT id FROM embryo_culture_record WHERE state=2 ORDER BY id DESC LIMIT 1)
  30. -- UNION (SELECT id FROM embryo_culture_record WHERE state=3 ORDER BY id DESC LIMIT 1)
  31. -- ) t;
  32. -- 2. 衍生保留集合:case_id / tl_sn+house_sn / video_id / picture_uuid
  33. DROP TEMPORARY TABLE IF EXISTS keep_case;
  34. CREATE TEMPORARY TABLE keep_case (case_id VARCHAR(64));
  35. INSERT INTO keep_case SELECT DISTINCT case_id FROM embryo_culture_record WHERE id IN (SELECT id FROM keep_record);
  36. DROP TEMPORARY TABLE IF EXISTS keep_dev;
  37. CREATE TEMPORARY TABLE keep_dev (tl_sn VARCHAR(64), house_sn INT);
  38. INSERT INTO keep_dev SELECT DISTINCT tl_sn, house_sn FROM embryo_culture_record WHERE id IN (SELECT id FROM keep_record);
  39. DROP TEMPORARY TABLE IF EXISTS keep_video;
  40. CREATE TEMPORARY TABLE keep_video (id BIGINT PRIMARY KEY);
  41. INSERT INTO keep_video SELECT id FROM video WHERE embryo_culture_record_id IN (SELECT id FROM keep_record);
  42. -- 3. 删除"跟随主线"的表里 不属于保留根 的数据(先子后父)
  43. DELETE FROM video_update WHERE video_id NOT IN (SELECT id FROM keep_video);
  44. DELETE FROM video_pictures WHERE video_id NOT IN (SELECT id FROM keep_video);
  45. DELETE FROM video_splice WHERE video_id NOT IN (SELECT id FROM keep_video);
  46. DELETE FROM video WHERE embryo_culture_record_id NOT IN (SELECT id FROM keep_record);
  47. DELETE FROM picture_identify_result_cache WHERE embryo_culture_record_id NOT IN (SELECT id FROM keep_record);
  48. DELETE FROM picture_identify_middle WHERE embryo_culture_record_id NOT IN (SELECT id FROM keep_record);
  49. DELETE FROM picture_identify_result WHERE embryo_culture_record_id NOT IN (SELECT id FROM keep_record);
  50. DELETE FROM embryo_mark_splice WHERE embryo_culture_record_id NOT IN (SELECT id FROM keep_record);
  51. DELETE FROM embryo_mark WHERE embryo_culture_record_id NOT IN (SELECT id FROM keep_record);
  52. DELETE FROM picture WHERE embryo_culture_record_id NOT IN (SELECT id FROM keep_record);
  53. DELETE FROM embryo WHERE embryo_culture_record_id NOT IN (SELECT id FROM keep_record);
  54. -- 4. 删除主线根 与 病例(保留被引用的 case)
  55. DELETE FROM embryo_culture_record WHERE id NOT IN (SELECT id FROM keep_record);
  56. DELETE FROM case_info WHERE case_id NOT IN (SELECT case_id FROM keep_case);
  57. DELETE FROM balance WHERE (tl_sn, house_sn) NOT IN (SELECT tl_sn, house_sn FROM keep_dev);
  58. -- 5. 流水/日志类:清空(开发查结构不需历史)
  59. TRUNCATE TABLE `log`;
  60. TRUNCATE TABLE `message`;
  61. TRUNCATE TABLE `debug_picture`;
  62. -- 6. 配置/字典表:不动(dictionary / embryo_level / mark / mark_key / mark_weight /
  63. -- identify_config / photo_search_button / software_version)
  64. COMMIT;
  65. -- 7. ⚠️ 图片动态分表 t_picture_*:每个培养记录的图片在 embryo_culture_record.picture_table_name 指定的分表里
  66. -- 保留根的分表保留,其余分表整张 DROP。手动执行下面生成的语句:
  67. SELECT CONCAT('DROP TABLE IF EXISTS `', table_name, '`;') AS drop_sql
  68. FROM information_schema.tables
  69. WHERE table_schema = 'aivfo_business'
  70. AND table_name LIKE 't_picture%'
  71. AND table_name NOT IN (
  72. SELECT picture_table_name FROM embryo_culture_record WHERE id IN (SELECT id FROM keep_record)
  73. );
  74. -- 把查询结果复制出来执行即可(不自动执行,避免误删)。
  75. SET SQL_SAFE_UPDATES = 1;
  76. -- ╔══════════════════════════════════════════════════════════╗
  77. -- ║ 第二部分:tl_setting 库(报警历史/环境采样/指令流水) ║
  78. -- ║ 配置类全留;流水类留近 30 天 ║
  79. -- ╚══════════════════════════════════════════════════════════╝
  80. USE `aivfo_tl_setting`; -- ← 改成你的实际库名
  81. SET SQL_SAFE_UPDATES = 0;
  82. START TRANSACTION;
  83. DELETE FROM alarm_data WHERE create_time < DATE_SUB(NOW(), INTERVAL 30 DAY);
  84. DELETE FROM alarm_send_info WHERE create_time < DATE_SUB(NOW(), INTERVAL 30 DAY);
  85. DELETE FROM environment_temperature WHERE collect_time < DATE_SUB(NOW(), INTERVAL 30 DAY);
  86. DELETE FROM mqtt_message WHERE create_time < DATE_SUB(NOW(), INTERVAL 30 DAY);
  87. -- 配置/字典/设备表不动:tl_info / tl_setting / house / house_well_setting /
  88. -- house_photograph_setting / house_collect / alarm / alarm_type / alarm_template /
  89. -- alarm_permissions / alarm_personnel / language_configuration / cn_region_info
  90. COMMIT;
  91. SET SQL_SAFE_UPDATES = 1;
  92. -- ╔══════════════════════════════════════════════════════════╗
  93. -- ║ 第三部分:data_transmission 库(视频副本) ║
  94. -- ╚══════════════════════════════════════════════════════════╝
  95. USE `aivfo_data_transmission`; -- ← 改成你的实际库名
  96. SET SQL_SAFE_UPDATES = 0;
  97. START TRANSACTION;
  98. -- 该库 video* 为传输态流水,开发查阅可清空(如需留样改为 WHERE 时间过滤)
  99. TRUNCATE TABLE `video_update`;
  100. TRUNCATE TABLE `video_pictures`;
  101. TRUNCATE TABLE `video_splice`;
  102. TRUNCATE TABLE `video`;
  103. COMMIT;
  104. SET SQL_SAFE_UPDATES = 1;
  105. -- ╔══════════════════════════════════════════════════════════╗
  106. -- ║ 第四部分:services 库 + 框架日志/定时 ║
  107. -- ╚══════════════════════════════════════════════════════════╝
  108. USE `aivfo_services`; -- ← 改成你的实际库名
  109. TRUNCATE TABLE `tdi_log`;
  110. -- alarm_contacts 是配置(告警联系人),不动
  111. -- 系统日志库(system_log 表所在库,按实际库名)
  112. -- TRUNCATE TABLE `system_log`;
  113. -- Quartz 定时任务(按实际库名,t_qrtz_* 为运行态,可清触发历史;定义表谨慎)
  114. -- DELETE FROM `t_qrtz_fired_triggers`;
  115. -- DELETE FROM `t_qrtz_scheduler_state`;
  116. -- =============================================================
  117. -- 执行后校验(应能查到保留的病例完整链):
  118. -- SELECT * FROM embryo_culture_record; -- 应剩 3 条
  119. -- SELECT count(*) FROM embryo; -- 仅这 3 条记录的胚胎
  120. -- SELECT count(*) FROM picture; -- 仅关联图片
  121. -- SELECT count(*) FROM video; -- 仅关联视频
  122. -- 配置类表数量应不变。
  123. -- =============================================================