sql - 具有嵌套外键的行上的 DELETE 请求
问题描述
我有一个表 B 引用的表 A,表 C 引用了表 B。
这样:
- 表 A (pk: id)
- 表 B (pk: id, fk: A_id)
- 表 C (fk: B_id)
每个外键都有一个约束 ON_DELETE:CASCADE,但是如果我试图删除表 A,它会拒绝。发生这种情况是因为表 B 中的行具有指向表 A 的外键,而表 C 具有指向表 B 的行。
我相信我可以通过先删除表 B,然后删除表 A 来解决这个问题。但是,有人能解释为什么这个 DELETE 是不可能的吗?当然,它应该能够执行降低外键“层次结构”并按顺序删除所有内容的功能?
谢谢
解决方案
在ON DELETE CASCADE操作中,如果父行被删除,会先删除子行,再删除父行,以保证不留下任何引用作为外键
至于您的问题,由于表 B 指的是表 A 的主键,而表 C 指的是表 B 的主键,因此在删除级联上应该起作用的关系只是父子,而不是超越。
推荐阅读
- javascript - 如何在angular8+中调用innerHtml中的post方法脚本?
- javascript - 当屏幕尺寸超过一定宽度尺寸时如何运行javascript?
- apache-spark - 资源匮乏下 Kubernetes 上的 Spark 作业无限期等待 SPARK_MIN_EXECUTORS
- c# - 是否允许 Native App 客户端在重定向 URI 中使用任何随机可用端口?
- reactjs - 为什么无论状态是对象还是字符串,React 都会以不同的方式重新渲染?
- javascript - 如何将所有导入的模块存储在一个文件中
- java - 如何限制创建的线程数并等待主线程,直到任何一个线程找到答案?
- docker - 如何有效地为 2 个远程节点使用 Kubernetes
- java - 为什么在 Java 中的类型转换期间允许在右侧使用(已擦除)泛型类型?
- amazon-web-services - 为什么使用 AWS Kinesis Firehose 在 Amazon AWS ElasticSearch 前面