裸Sql Server-在表上引入FOREIGN KEY约束可能会导致循环或多个级联路径



这与在表上引入外键约束非常相似,可能会导致循环或多个级联路径,只是该问题的答案没有解释错误背后的原理。

我有以下简单的模式:

CREATE TABLE [dbo].[DbInfo](
[Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY
)
GO
CREATE TABLE [dbo].[MyTable](
[Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[DbInfo1Id] [int] NOT NULL,
[DbInfo2Id] [int] NOT NULL
)
ALTER TABLE [dbo].[MyTable] ADD CONSTRAINT [FK_MyTable_DbInfo_DbInfo1Id] FOREIGN KEY([DbInfo1Id])
REFERENCES [dbo].[DbInfo] ([Id])
ON DELETE CASCADE
GO

现在,我想将相同的约束添加到列MyTable.DbInfo2Id:

ALTER TABLE [dbo].[MyTable] ADD CONSTRAINT [FK_MyTable_DbInfo_DbInfo2Id] FOREIGN KEY ([DbInfo2Id])
REFERENCES [DbInfo] ([Id])
ON DELETE CASCADE;

但我得到以下错误:

Introducing FOREIGN KEY constraint 'FK_MyTable_DbInfo_DbInfo2Id' on table 'MyTable' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

您可以在Sql Fiddle 中复制它

为什么我在这里做的事情有问题?

因为CASCDE模式将删除可能被其他会导致级联的约束使用的ID,也将删除可能由引发级联的引物约束使用的标识。。。等等!

最新更新