0

在 Oracle 中,我有一个名为 Category 的表,由三列组成:
ID = 是系统生成的唯一键,
Catgeory_name = 是 300 char 和 parent_id = 可以是 -1,这意味着该类别没有父级,也可以是前面描述为 parent_id 的 ID 列中的值。

问题是当我删除一个作为父类的类别时,我还需要自动删除所有子类。我的问题是:SQL 是否提供了自动执行此操作的任何方法,或者我应该在我的上层语言(即 C#)中处理它。

例如,如果两个表之间存在外键情况,我知道 SQL 提供 ON DELETE CASCADE 以在删除原始记录请求时删除依赖记录以及父记录。

但是,我不知道 SQL 中有什么方法可以自动处理上述情况,这意味着当在上表中删除父级时,所有子级也会被删除。

在此先感谢您的帮助。

4

1 回答 1

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,您可能会使用 -1 将一行插入到categoryid中,然后创建外键约束。但这远不如使用NULL.

于 2012-12-04T18:04:31.407 回答