| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- -- =============================================================
- -- 时差项目 · 数据库测试数据精简脚本(开发用)
- -- 目的:库结构不动,只精简测试数据;按业务主线保留少量可关联的种子数据
- -- 默认参数:保留 3 个培养记录 + 关联链;设备流水留近 30 天;日志清空;配置字典全留
- -- 作者:依据 项目文档/需求文档/11-数据库测试数据精简方案.md 生成
- --
- -- ⚠️ 执行前务必:
- -- 1) 全量备份所有库(mysqldump)
- -- 2) 仅在【开发库】执行,不要碰生产
- -- 3) 先整段在测试库演练,确认系统能启动、能查到保留的病例完整链
- -- 4) 各库名按你的实际库名替换(下方用占位库名,已按模块分段)
- -- 说明:很多表无主外键,故用"保留集合临时表 + NOT IN 删除"保证不断链
- -- =============================================================
- -- ╔══════════════════════════════════════════════════════════╗
- -- ║ 第一部分:business 库(病例/胚胎/图片/视频/识别/标记) ║
- -- ║ USE aivfo_business; -- ← 改成你的实际业务库名 ║
- -- ╚══════════════════════════════════════════════════════════╝
- USE `aivfo_business`;
- SET SQL_SAFE_UPDATES = 0;
- START TRANSACTION;
- -- 1. 选种子根:保留最近 3 个培养记录(可改 WHERE/LIMIT 或手动指定 id)
- DROP TEMPORARY TABLE IF EXISTS keep_record;
- CREATE TEMPORARY TABLE keep_record (id BIGINT PRIMARY KEY);
- INSERT INTO keep_record(id)
- SELECT id FROM embryo_culture_record ORDER BY id DESC LIMIT 3;
- -- 如需覆盖不同状态,改用:按 state 各取若干,例如:
- -- INSERT INTO keep_record SELECT id FROM (
- -- (SELECT id FROM embryo_culture_record WHERE state=1 ORDER BY id DESC LIMIT 1)
- -- UNION (SELECT id FROM embryo_culture_record WHERE state=2 ORDER BY id DESC LIMIT 1)
- -- UNION (SELECT id FROM embryo_culture_record WHERE state=3 ORDER BY id DESC LIMIT 1)
- -- ) t;
- -- 2. 衍生保留集合:case_id / tl_sn+house_sn / video_id / picture_uuid
- DROP TEMPORARY TABLE IF EXISTS keep_case;
- CREATE TEMPORARY TABLE keep_case (case_id VARCHAR(64));
- INSERT INTO keep_case SELECT DISTINCT case_id FROM embryo_culture_record WHERE id IN (SELECT id FROM keep_record);
- DROP TEMPORARY TABLE IF EXISTS keep_dev;
- CREATE TEMPORARY TABLE keep_dev (tl_sn VARCHAR(64), house_sn INT);
- INSERT INTO keep_dev SELECT DISTINCT tl_sn, house_sn FROM embryo_culture_record WHERE id IN (SELECT id FROM keep_record);
- DROP TEMPORARY TABLE IF EXISTS keep_video;
- CREATE TEMPORARY TABLE keep_video (id BIGINT PRIMARY KEY);
- INSERT INTO keep_video SELECT id FROM video WHERE embryo_culture_record_id IN (SELECT id FROM keep_record);
- -- 3. 删除"跟随主线"的表里 不属于保留根 的数据(先子后父)
- DELETE FROM video_update WHERE video_id NOT IN (SELECT id FROM keep_video);
- DELETE FROM video_pictures WHERE video_id NOT IN (SELECT id FROM keep_video);
- DELETE FROM video_splice WHERE video_id NOT IN (SELECT id FROM keep_video);
- DELETE FROM video WHERE embryo_culture_record_id NOT IN (SELECT id FROM keep_record);
- DELETE FROM picture_identify_result_cache WHERE embryo_culture_record_id NOT IN (SELECT id FROM keep_record);
- DELETE FROM picture_identify_middle WHERE embryo_culture_record_id NOT IN (SELECT id FROM keep_record);
- DELETE FROM picture_identify_result WHERE embryo_culture_record_id NOT IN (SELECT id FROM keep_record);
- DELETE FROM embryo_mark_splice WHERE embryo_culture_record_id NOT IN (SELECT id FROM keep_record);
- DELETE FROM embryo_mark WHERE embryo_culture_record_id NOT IN (SELECT id FROM keep_record);
- DELETE FROM picture WHERE embryo_culture_record_id NOT IN (SELECT id FROM keep_record);
- DELETE FROM embryo WHERE embryo_culture_record_id NOT IN (SELECT id FROM keep_record);
- -- 4. 删除主线根 与 病例(保留被引用的 case)
- DELETE FROM embryo_culture_record WHERE id NOT IN (SELECT id FROM keep_record);
- DELETE FROM case_info WHERE case_id NOT IN (SELECT case_id FROM keep_case);
- DELETE FROM balance WHERE (tl_sn, house_sn) NOT IN (SELECT tl_sn, house_sn FROM keep_dev);
- -- 5. 流水/日志类:清空(开发查结构不需历史)
- TRUNCATE TABLE `log`;
- TRUNCATE TABLE `message`;
- TRUNCATE TABLE `debug_picture`;
- -- 6. 配置/字典表:不动(dictionary / embryo_level / mark / mark_key / mark_weight /
- -- identify_config / photo_search_button / software_version)
- COMMIT;
- -- 7. ⚠️ 图片动态分表 t_picture_*:每个培养记录的图片在 embryo_culture_record.picture_table_name 指定的分表里
- -- 保留根的分表保留,其余分表整张 DROP。手动执行下面生成的语句:
- SELECT CONCAT('DROP TABLE IF EXISTS `', table_name, '`;') AS drop_sql
- FROM information_schema.tables
- WHERE table_schema = 'aivfo_business'
- AND table_name LIKE 't_picture%'
- AND table_name NOT IN (
- SELECT picture_table_name FROM embryo_culture_record WHERE id IN (SELECT id FROM keep_record)
- );
- -- 把查询结果复制出来执行即可(不自动执行,避免误删)。
- SET SQL_SAFE_UPDATES = 1;
- -- ╔══════════════════════════════════════════════════════════╗
- -- ║ 第二部分:tl_setting 库(报警历史/环境采样/指令流水) ║
- -- ║ 配置类全留;流水类留近 30 天 ║
- -- ╚══════════════════════════════════════════════════════════╝
- USE `aivfo_tl_setting`; -- ← 改成你的实际库名
- SET SQL_SAFE_UPDATES = 0;
- START TRANSACTION;
- DELETE FROM alarm_data WHERE create_time < DATE_SUB(NOW(), INTERVAL 30 DAY);
- DELETE FROM alarm_send_info WHERE create_time < DATE_SUB(NOW(), INTERVAL 30 DAY);
- DELETE FROM environment_temperature WHERE collect_time < DATE_SUB(NOW(), INTERVAL 30 DAY);
- DELETE FROM mqtt_message WHERE create_time < DATE_SUB(NOW(), INTERVAL 30 DAY);
- -- 配置/字典/设备表不动:tl_info / tl_setting / house / house_well_setting /
- -- house_photograph_setting / house_collect / alarm / alarm_type / alarm_template /
- -- alarm_permissions / alarm_personnel / language_configuration / cn_region_info
- COMMIT;
- SET SQL_SAFE_UPDATES = 1;
- -- ╔══════════════════════════════════════════════════════════╗
- -- ║ 第三部分:data_transmission 库(视频副本) ║
- -- ╚══════════════════════════════════════════════════════════╝
- USE `aivfo_data_transmission`; -- ← 改成你的实际库名
- SET SQL_SAFE_UPDATES = 0;
- START TRANSACTION;
- -- 该库 video* 为传输态流水,开发查阅可清空(如需留样改为 WHERE 时间过滤)
- TRUNCATE TABLE `video_update`;
- TRUNCATE TABLE `video_pictures`;
- TRUNCATE TABLE `video_splice`;
- TRUNCATE TABLE `video`;
- COMMIT;
- SET SQL_SAFE_UPDATES = 1;
- -- ╔══════════════════════════════════════════════════════════╗
- -- ║ 第四部分:services 库 + 框架日志/定时 ║
- -- ╚══════════════════════════════════════════════════════════╝
- USE `aivfo_services`; -- ← 改成你的实际库名
- TRUNCATE TABLE `tdi_log`;
- -- alarm_contacts 是配置(告警联系人),不动
- -- 系统日志库(system_log 表所在库,按实际库名)
- -- TRUNCATE TABLE `system_log`;
- -- Quartz 定时任务(按实际库名,t_qrtz_* 为运行态,可清触发历史;定义表谨慎)
- -- DELETE FROM `t_qrtz_fired_triggers`;
- -- DELETE FROM `t_qrtz_scheduler_state`;
- -- =============================================================
- -- 执行后校验(应能查到保留的病例完整链):
- -- SELECT * FROM embryo_culture_record; -- 应剩 3 条
- -- SELECT count(*) FROM embryo; -- 仅这 3 条记录的胚胎
- -- SELECT count(*) FROM picture; -- 仅关联图片
- -- SELECT count(*) FROM video; -- 仅关联视频
- -- 配置类表数量应不变。
- -- =============================================================
|