当我从我们的应用程序中删除记录时,它会在某些表中保留一些记录,我正在寻找帮助,以便弄清楚如何创建一个删除子表中记录的过程已从父表中清除?
答案 0 :(得分:0)
一般来说,您的问题的答案称为存在量化。在SQL中,它具有以下形式:
delete from C where not exists (
select 1 from P
where P.child_key = C.key
)
然而,你不应该进入那个位置:不应该是孩子没有父母的情况。子表应该有一个声明要求存在父键的外键。这样,要插入子项的父项,并且在引用它的子项存在时不能删除父项 。
在存在此类外键约束的情况下,唯一允许的事件顺序是删除父级中的子级where exists
键,然后删除父级。为了正确,这两个语句应该是事务的一部分。
有些评论建议使用声明性参照完整性(DRI)来删除子行。我不是粉丝;我使用DRI作为约束形式来创建规则。对于数据的操作,我建议使用显式代码,在应用程序级别可以更轻松地处理意外情况。
答案 1 :(得分:0)
它发生在组织严密的数据库中,因此您需要清理数据。
delete childTable where FK_field not in (
select PK_field from parentTable)
为了避免将来在你的childTable中创建FK约束这个问题。