当前位置: 首页 > news >正文

SQL删除数据时存在依赖关系_设置外键级联删除ON DELETE

外键未设ON DELETE CASCADE导致删主表报错,因默认RESTRICT阻止操作;应建表时定义级联,已有表需先查外键名再重建;级联会递归删除整条依赖链,执行前须逐层SELECT确认影响范围。外键没加 ON DELETE CASCADE,删主表就报错MySQL 或 PostgreSQL 里删父记录时提示 Cannot delete or update a parent row: a foreign key constraint fails,基本就是子表外键没配级联行为。默认是 RESTRICT(或 NO ACTION),数据库直接拦住操作,不给你删。实操建议:建表时就写明:在子表外键定义里加上 ON DELETE CASCADE,比如 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE已有表要补加?MySQL 不支持直接 ALTER TABLE ... ADD FOREIGN KEY ... ON DELETE CASCADE,得先 DROP 原外键(得知道它的名字,查 SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME='xxx' AND COLUMN_NAME='xxx'),再重建PostgreSQL 稍友好些,可用 ALTER TABLE child_table DROP CONSTRAINT fk_name; ALTER TABLE child_table ADD FOREIGN KEY (col) REFERENCES parent(col) ON DELETE CASCADE;级联删除会一并删掉多少行?怎么提前确认ON DELETE CASCADE 不是“删一行、带出一行”,而是递归清理整条依赖链——只要外键路径存在,就会一路删下去。比如 orders → order_items → inventory_logs,删一个订单,可能连带删几十条日志。实操建议:执行前务必用 SELECT 模拟影响范围:比如想删 users 表中 id=123 的用户,先查 SELECT COUNT(*) FROM orders WHERE user_id = 123,再查 SELECT COUNT(*) FROM order_items WHERE order_id IN (SELECT id FROM orders WHERE user_id = 123),逐层摸清规模别依赖 ORM 的软删逻辑——如果 ORM 层做了 before_destroy 钩子,但数据库外键又开了 CASCADE,可能重复删或冲突MySQL 8.0+ 支持 FOREIGN_KEY_CHECKS = 0 临时关检查,但这是绕过约束,不是替代级联;关了之后删数据不会触发级联,子表残留孤儿记录PostgreSQL 和 MySQL 的 ON DELETE 行为差异语法看着一样,但底层处理和默认值有坑。MySQL 默认是 RESTRICT,PostgreSQL 默认也是 RESTRICT,但 MySQL 的 CASCADE 不支持跨 schema 级联(除非同库同 schema),而 PostgreSQL 在同一数据库内支持跨 schema 外键(需显式指定 schema 名)。 Shakespeare 一款人工智能文案软件,能够创建几乎任何类型的文案。

http://www.jsqmd.com/news/646813/

相关文章:

  • 如何实现SQL存储过程状态监控_编写实时运行监控仪表盘
  • 胡桃讲编程:混音教学第二步|地下程序员 3 年实测!UVR5 + 万兴喵影,人声分离就该这么玩
  • 数据库复制机制:主从同步与多主复制的实现
  • 多模态实时处理能力不是“算得快”,而是“判得准、切得稳、传得省”——详解动态分辨率感知+语义优先Token丢弃算法
  • 用JK触发器搭个11进制计数器:从真值表到Multisim仿真的保姆级教程
  • 【交换技术原理-VLAN虚拟局域网】
  • 从安装到汉化:手把手教你配置Checkmarx 9.5中文版,打造本地代码审计环境
  • 突破性PDF优化:实战OCRmyPDF字体配置深度解析
  • 宝塔面板如何配置多版本PHP共存_针对不同站点指定环境
  • 如何编写SQL存储过程流水线_通过临时表暂存中间计算结果
  • 【AIGC基础设施生死线】:多模态负载均衡的7大反模式,第4种正在 silently kill 你的推理吞吐
  • 图像修复新思路:除了U-Net和注意力,试试给Mamba加上‘通道感知’这个外挂
  • Python自动化抢票实战:5步构建大麦网抢票脚本终极指南
  • 《智能体应用交付实操:OpenClaw+Skills+RAG+Agent智能体应用案例实操和智能体交付的方案设计》
  • 长沙心理科医院暖心指南+真实案例分享
  • 基于 Three.js 的 3D 地图可视化:核心原理与实现步骤
  • Makerbase VESC遥控设置避坑指南:PPM信号范围校准不对?可能是这3个原因
  • 三步解锁B站视频转文字神器:告别手动记录,拥抱AI智能提取
  • 胡桃讲编程:混音教学第二步|人声分离全实操:UVR5 + 万兴喵影双方案,讲透每一步为什么这么做
  • JavaScript中AllocationInstrumentation监控内存分配
  • 心理有问题去医院挂什么科?暖心案例分享
  • 怎么在phpMyAdmin中设置数据的自动归档表_结构克隆与分区
  • 从灰度值到材料属性:手把手教你用Mimics为股骨模型赋予‘生命’(附Abaqus导入配置)
  • 生成式AI应用架构设计终极 checklist(含AWS/Azure/GCP三云适配模板·限免24小时)
  • 兰亭妙微画册设计白皮书:12栏网格、三级信息分层与品牌VI色彩系统的实战应用 - ui设计公司兰亭妙微
  • 深入解析SqlSugar:.NET领域的高性能多数据库ORM框架
  • 【交换技术原理-交换机技术原理】
  • 理解JavaScript的Event Loop:微任务与宏任务
  • 从GitLab迁移到Gogs:用Docker低成本搭建个人/小团队私有代码仓库实战
  • 指针与数组深度攻略:数组名、传参、冒泡、二级指针