我有两张桌子: Parent,有一个主键(parentID)和一些varchar(50)和Child类型的其他字段,如下所示:
childID, primary key
parentID, foreign key references Parent (parentID)
otherID, foreign key to another table
现在,我修改了parentID键的关系,并将delete设置为cascade而不是No Action (我正在使用2008服务器工作室,右键单击列,选择修改,然后右键单击表设计并选择关系。然后我选择父/子表的关系并打开下面的插入/更新规范部分表设计师)
如果我从Child删除一行,再次没问题。 如果我从Parent中删除一行,则删除子表的所有行,即使其中大多数行都指向其他父ID。
我继承了这个DB及其所有表。我缺少一些属性设置吗?根据我的阅读,级联删除应该只删除指向我从Parent中删除的单个parentID的子行。
感谢。
本
答案 0 :(得分:2)
是的,删除应仅删除与已删除的“父”相关的行。
查看级联删除设置,并查找可能写错的触发器。
答案 1 :(得分:1)
尝试设置SetNull而不是cascade,这会将您的子表列(其中父表的键退出)设置为 NULL 。