技能|数据库表与数据删除内容比对与双守卫核验法
一、适用场景
要 DROP TABLE / 删行 / 清空重导 / 合并两套同源表 / 清理孤儿表与僵尸记录。
触发词:孤儿表、DROP、删表、清空重导、一数一源清理、僵尸数据。
前置:本包只讲「怎么核」,不代替用户拍板——不可逆动作未确认前一律不动手。
二、操作步骤
-
先判权威源:母本(xlsx / docx 原件)优先于数据库里任何一份表。
没有母本、也没有第二份完整副本时,不具备删除资格,先补母本。 -
逐列核验,绝不只比行数(本包第一铁律):
行数相同的两套表,内容可以完全不同。抽查每列的填充率(非空行数 / 总行数),
找出「一边有值、一边全空」的列——那往往就是会被误删的真值。 -
行数守卫:删除前
SELECT COUNT(*),确认目标表确实是 0 行或确属冗余,把数字写进记录。 -
双备份守卫:确认数据同时存在于「母本」与「新表」两处,且两处行数一致,才允许 DROP。
只有一处备份 → 不许删。 -
删前快照:先做一次数据库快照备份,留下可回滚点。
-
删除后复验:目标表 GONE + 新表行数与母本一致 + 全路由冒烟无回归,三项都过才算闭环。
-
留痕五要素:表名 / 行数 / 逐列比对结论 / 守卫项(母本 + 新表)/ 复验结果,落当日日志。
三、注意边界
- 禁通配符,逐表精确
DROP TABLE <名>;回收站 / trash 兜底对数据库不适用,靠的是删前快照。 - 沙箱禁止打开线上库做验证 → 一律用快照副本 +
DB_PATH环境变量重定向。 - 删除的目的是消除一数一源的第二个真相,不是为了腾空间;为腾空间而删是本末倒置。
- 一数一源:删完必须确认系统里只剩一个权威来源,且入口导航已指向它。
四、反例避雷
- ✗ 只比行数就删(2026-09-29 实证):
cw_f07*(16/0/0/22) 与孤儿cw_n00~n03(16/0/0/22) 行数一模一样,
但「备注」列 c5 只在孤儿表填了 6/16、c6 填了 2/22,旧cw_f07*同列全空(更早的坏解析丢了最后一列)。
直接 DROP 孤儿表就丢真值;正确做法是两套全 DROP,由母本完整重导。 - ✗ 挪表改名代替清空重导:坏解析导进来的残缺表,改名之后依然残缺;母本才是权威源。
- ✗ 不逐列核验源表结构:
ed_n01~n04里 c1 恒空、created_at是独立列、日期序列在ed_n01.c7/ed_n04.c8,
不核清楚就会错位导入。 - ✗ 无母本就删孤儿表:2026-09-29 是先新建权威母本 xlsx、让系统接管 72 行,之后才删孤儿表。
- ✗ 用文件名当编号:文件名带
ED-F06会让file_code把所有 sheet 压成f06/f06_1…;
必须用工作表名F06~F09才能让sheet_suffix正确取号。
五、代码锚点 / 实战战绩
锚点
- .workbuddy/memory/2026-09-29.md L316-322(F07 两套表行数同、内容不同)
- .workbuddy/memory/2026-09-29.md L355-359(ledger_cw 经 SELECT COUNT(*) 守卫后 DROP)
- .workbuddy/memory/2026-09-29.md L412-427(ed_n01~n04 逐列核验 → 新建母本 → 双守卫 → DROP → 复验)
- .workbuddy/memory/2026-09-29.md L389(删前快照 hfms-backups/20260929-033226)
- 代码:程序源代码/ledgers.py(SPECS / table_of / cols)、程序源代码/db.py(ledger_* 读写)、程序源代码/backup.py(快照)
战绩
- cw_f07* 完整重导后 = 16/0/0/22 且备注齐全,孤儿 cw_n00~n03 零残留。
- ed_f06~f09 = 18/33/9/12 合计 72 行零丢失,与母本一致;ed_n01~n04 在 DB 中 GONE;十域导航无回归。
- ledger_cw 确认 0 行后 DROP,无数据损失。
- documents 81→76、embeddings 1419→743、悬空 0、孤儿向量 0。
六、关联笔记
- [[技能|不可逆语义判断歧义消解与确认前禁动手法]](文件层的删除判断,与本包互为表里)
- [[技能|废弃数据源清理三步法]](数据源层清理)
- [[技能|数据库快照在线备份与校验SOP]](删前快照)
- [[技能|一数一源架构原则]](删除的动机)
- [[技能|沙箱环境写文件限制规避法]](DB 快照副本 + DB_PATH 隔离)
七、版本记录
| 版本 | 日期 | 变更 |
|---|---|---|
| v1.0 | 2026-10-25 | 首发:内容比对优先于行数比对 + 双守卫 + 五要素留痕;附 scripts/db_drop_guard_check.py 只读体检器 |