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 一款人工智能文案软件,能够创建几乎任何类型的文案。

相关推荐
2601_9669496532 分钟前
如何封装 qd.klines.batch(),让批量 K 线查询函数在多个策略中复用?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
无言听风雨丶1 小时前
Redis 运维实战与排错
运维·数据库·redis
神仙别闹2 小时前
基于Python实现英词语自动对齐系统
开发语言·python
akinggw2 小时前
libagentcore - 一个基于c++的AI多agent系统升级到2.0版本
开发语言·jvm·c++
老歌老听老掉牙2 小时前
圆柱端面四平面交线及其在yoz面投影的几何解析与 Python 实现
开发语言·python·平面
小天源2 小时前
智叟云集系统 · 架构与职责分层
服务器·前端·数据库
我要见SA姐13 小时前
Chrome 扩展安全攻防实录:从权限滥用到供应链投毒
运维·人工智能·python·机器学习·自动化
2601_962885723 小时前
给 backtrader 接 A 股数据:用 AlphaFeed 喂PandasData
python
herinspace3 小时前
管家婆实用贴-SQL 2008如何修改成混合模式
服务器·数据库·sql·管家婆软件·财务软件·合肥管家婆软件
YYYing.3 小时前
【Agent系列 (十一) 】上下文工程
人工智能·python·ai·agent·上下文工程