我有以下与 SQL Server 2012 一起使用的 DDL:
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 的孩子,我希望在 Subject 中删除 subjectID=3 失败。
为此,我不清楚,似乎无法找到答案。我是否需要添加“DELETE NO ACTION”或者我可以不删除这三个词。
我在问这个问题,就像在一个类似的问题中一样,我的回答是我应该在父母身上定义一个触发器。但是我认为如果存在孩子,只需定义外键就会阻止我删除父母。