可能导致循环或多个级联路径

时间:2018-12-08 00:56:49

标签: sql sql-server

我有一个任务:

  

如果删除“商店”,则对其的所有引用都将设置为NULL

当我尝试创建表时:

CREATE TABLE TEST
(  
    id int Primary Key,
    shop int FOREIGN KEY REFERENCES TEST(id) ON DELETE SET NULL,
);

我得到一个错误:

  

在表“ TEST”上引入外键约束“ FK__TEST__shop__2882FE7D”可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。   消息1750,级别16,状态0,第1行

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

由于创建正在引用其自身的表而出现错误。这不是一个好主意,也不是您想要的。

对于您的任务,您需要创建另一个表,该表具有引用第一个表的关系(外键)。必须正确定义外键,以保留在删除父级时将子级设置为NULL的规则,例如:

CONSTRAINT fk_name
    FOREIGN KEY (child_col)
    REFERENCES parent_table (parent_col)
    ON DELETE SET NULL

请参见this link on how to set option ON DELETE in a foreign key

答案 1 :(得分:0)

您可以执行此操作,但并不完全符合您的意愿。以下作品:

CREATE TABLE TEST (  
    id int Primary Key,
    shop int,
    FOREIGN KEY (shop) REFERENCES TEST(id) ON DELETE NO ACTION,
);

说实话,我不确定为什么内联定义不起作用。更重要的一点是行动。不允许使用SET NULL,因为SQL Server对潜在周期非常谨慎。但是,允许NO ACTION