我有以下DDL,我与SQL Server 2012使用:我是否需要在我的外键上指定ON DELETE NO ACTION?
CREATE TABLE Subject (
[SubjectId] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (50) Not NULL,
CONSTRAINT [PK_Subject] PRIMARY KEY CLUSTERED ([SubjectId] ASC)
)
CREATE TABLE Topic (
[TopicId] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (50) NOT NULL,
[SubjectId] INT NOT NULL,
CONSTRAINT [PK_Topic] PRIMARY KEY CLUSTERED ([TopicId] ASC)
)
ALTER TABLE [Topic] WITH CHECK ADD CONSTRAINT [FK_TopicSubject]
FOREIGN KEY([SubjectId]) REFERENCES [Subject] ([SubjectId])
ON DELETE NO ACTION
我要的是SQL Server停止我删除家长如果给家长参考的孩子存在?例如,我想要删除SubjectID = 3的主题将失败,如果有子项的SubjectId为3.
对此,我不清楚,似乎无法找到答案。我是否需要添加“DELETE NO ACTION”或者我可以不删除这三个词。
我在问这个问题,因为在一个类似的问题中,我有一个回应,我应该定义父级的触发器。不过,我认为只是定义外键将阻止我删除父母,如果一个孩子存在。
Dave - 我很抱歉,但我有点困惑于“指定如果表中被更改的行发生什么操作,如果这些行具有参照关系并且被引用的行从父表中删除。”这是什么意思,因为它涉及我的主题和主题表? – Melina
是主题是父和主题是子表。 – DaveShaw
更新了我的答案。 – DaveShaw