我有一个任务:
如果删除“商店”,则对其的所有引用都将设置为
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行
我在做什么错了?
答案 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
。