news 2026/4/15 19:25:30

pg on delete 策略探讨

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
pg on delete 策略探讨

你好!很高兴能和你探讨 PostgreSQL(以下简称 PG)的知识。

作为一名资深开发者,你一定处理过不少“脏数据”或者“孤儿数据”。在数据库的世界里,当我们删除一条记录时,那些引用它的“下游数据”该何去何从?这就是ON DELETE策略要解决的核心问题:如何维护参照完整性(Referential Integrity)。

🌱 本节目标

理解 PG 中外键删除(ON DELETE)的五种处理方式,并建立一套“场景驱动”的选择逻辑。


🧠 核心概念

  1. 父表 (Parent Table):被引用的表(如:用户表 users)。
  2. 子表 (Child Table):持有外键的表(如:订单表 orders,通过user_id引用用户)。
  3. 副作用 (Side Effects):当你删掉“父”时,“子”应该报错、跟着消失、还是原地待命?

❓ 苏格拉底式引导问题

在深入语法前,请先调动你的架构师直觉思考以下场景:

  1. 如果你在做一个留学中介系统,删除了一个“国家”(如:英国),那么关联这个国家的所有“学校”数据应该被自动删掉吗?还是应该提示报错?
  2. 如果你在做SEO 流量统计,删除了一个“域名”,那些关联该域名的“每日访问日志”还有留着的必要吗?
  3. 在 Rust 或 Go 中,如果你释放了一个父对象的内存,但子对象还持有一个失效的指针,会发生什么?数据库的ON DELETE是否就是在处理这种“野指针”问题?

🧩 策略拆解与类比

PG 提供了五种主要的策略。我们可以用**“文件系统操作”“代码逻辑”**来类比:

策略 (Strategy)中文释义程序员视角类比行为描述
NO ACTION不采取行动编译器报错默认选项。如果还有子记录,直接报错。但在事务结束时才最终检查。
RESTRICT限制/禁止Runtime Panic立即报错。只要发现有子记录关联,不允许删除父记录。
CASCADE级联rm -rf连坐。父记录没了,子记录也自动被删除。
SET NULL设为空指针置为 nil断开联系。父记录删除,子记录的相关字段设为NULL
SET DEFAULT设为默认重置为默认配置改嫁。父记录删除,子记录的相关字段恢复到定义的DEFAULT值。
1. 强一致性防御:RESTRICT / NO ACTION

这是最保守的策略。

  • 场景:银行账户与交易记录。你不能直接删掉一个还有流水记录的账户。
  • 直觉“只要有人还在引用我,我就不准消失。”
2. 自动化清理:CASCADE
  • 场景:SEO 系统中,删除一个Task(任务),那么该任务抓取到的RawData(原始数据)通常也没用了。
  • 直觉“父亡子随,干净利落。”
3. 历史留存:SET NULL
  • 场景:留学中介系统中,删除了一个Consultant(顾问),但该顾问签约的Student(学生)记录必须保留,只是“所属顾问”这一栏变空。
  • 直觉“人走了,事还得留着,只是暂时没负责人。”

📊 决策矩阵(程序员速查)

如果你不确定选哪个,看这张表:

必须保留

不需要,随父去

暂时断开关系

强制要求先处理子项

转移到默认值

准备删除父记录

子记录必须保留吗?

子记录需要关联吗?

CASCADE 级联删除

SET NULL 设为空

RESTRICT 报错禁止

SET DEFAULT 设为默认


✅ 小结

  • 默认 (Default):如果不写,PG 默认是NO ACTION
  • 最常用CASCADE(用于日志/临时数据)和RESTRICT(用于核心业务资产)。
  • 最安全SET NULL(适合 2B 业务中需要审计和保留历史的场景)。
  • 注意点CASCADE虽然爽,但在超大数据量下会导致长时间锁表,慎用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/6 20:05:23

本科毕业论文AI检测全流程指南

又到毕业季,很多本科同学第一次遇到AI检测。今天整理一份完整指南。 一、什么时候要做AI检测? 一般流程: 论文初稿完成 自己先检测一遍 修改到达标 提交学校检测 通过后答辩 二、本科论文AI率要求 大多数学校要求20-30%以下&#xf…

作者头像 李华
网站建设 2026/4/11 20:57:16

算法工程化十年演进(2015–2025)

算法工程化十年演进(2015–2025) 一句话总论: 2015年算法工程化还是“实验室原型手工脚本单机调试”的学术时代,2025年已进化成“万亿级多模态VLA大模型全栈工程化量子加速实时部署亿级在线自进化全域具身闭环系统”的终极产业时代…

作者头像 李华
网站建设 2026/3/30 12:16:15

智能驾驶规划算法十年演进(2015–2025)

智能驾驶规划算法十年演进(2015–2025) 一句话总论: 2015年规划算法还是“规则Frenet网格优化手工调参”的刚性工程时代,2025年已进化成“端到端VLA大模型轨迹直出游戏论社交博弈量子不确定性自愈全域自进化规划”的语义意图时代&…

作者头像 李华
网站建设 2026/4/12 22:22:42

4.12 投研助手实战:Qwen-Agent,用AI构建完整的投研分析系统

4.12 投研助手实战:Qwen-Agent,用AI构建完整的投研分析系统 引言 本文通过投研助手案例,演示如何使用Qwen-Agent构建完整的投研分析系统。 一、系统概述 1.1 系统功能 # 投研助手系统 def investment_research_system():"""投研助手系统""&qu…

作者头像 李华
网站建设 2026/3/19 19:42:04

借助 AI 快速完成论文,7 个网站提供规范格式与 LaTeX 支持

7 个 AI 生成论文网站推荐 论文格式规范 LaTeX 模板一键适配 工具快速对比排名(前7推荐) 工具名称 核心功能亮点 处理时间 适配平台 aibiye 学生/编辑双模式降AIGC 1分钟 知网、万方等 aicheck AI痕迹精准弱化查重一体 ~20分钟 知网、格子达…

作者头像 李华
网站建设 2026/3/31 5:12:52

7 个 AI 论文写作助手,自动优化格式并匹配 LaTeX 模板

7 个 AI 生成论文网站推荐 论文格式规范 LaTeX 模板一键适配 工具快速对比排名(前7推荐) 工具名称 核心功能亮点 处理时间 适配平台 aibiye 学生/编辑双模式降AIGC 1分钟 知网、万方等 aicheck AI痕迹精准弱化查重一体 ~20分钟 知网、格子达…

作者头像 李华