我有以下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