在Oracle中,我有一个名为Category的表,由三列组成:
ID =系统生成的唯一密钥,
Catgeory_name = 300 char,
和parent_id =哪个可以是-1,这意味着没有此类别的父级,或者它可以是前面描述的父级ID列中的值。
问题是当我删除一个父类别时,我也需要自动删除所有孩子。我的问题是:SQL是否提供了自动执行此操作的任何方法,或者我应该在我的上层语言(C#)中处理它。
例如,如果两个表之间存在外键情况,我知道SQL提供ON DELETE CASCADE来删除依赖记录以及对原始记录的删除请求时的父记录。
但是,我不知道SQL会以什么方式自动处理上述情况,这意味着当在上表中删除父项时,所有子项也会被删除。
提前感谢您的帮助。
答案 0 :(得分:2)
如果parent_id
设置为NULL
,如果没有父级,则可以在category
上定义引用category
SQL> create table category (
2 id number primary key,
3 category_name varchar2(300),
4 parent_id number references category( id )
5 );
Table created.
然后,您可以声明该外键约束,以便在删除父行时自动删除子项。
如果你真的想使用-1的魔术值来表示缺少父级而不是使用正确的NULL
,你可以使用{在category
表中插入一行{ {1}}为-1然后创建外键约束。但这比使用id
要优雅得多。