簡體   English   中英

如果刪除了主表實體,則使用FOREIGN KEY約束刪除所有記錄

[英]Delete All the records Using FOREIGN KEY Constraints if Main Table Entity is deleted

如果主表的實體被刪除,因為在所有表上都施加了約束,那么如何從多個表中刪除記錄

情境

讓我給你一個場景:這個主表叫做OrganizationTblOrganization 該組織的分支位於名為tblBranch分支表中,並且這些分支在表tblApplication具有多個應用程序。 這些應用程序又被tblUsers存儲的多個用戶使用。

我想要的是:刪除組織時,還必須刪除與其相關的所有分支機構,應用程序和用戶。

我如何將其應用在按鈕上,單擊asp.net Web表單?

現在這是我的刪除功能,非常簡單

Public void Delete(int? id)
{
    var str = ”DELETE FROM tblOrganization WHERE organizationId=”+ id ;
}

我的表如下所示:

CREATE TABLE tblOrganization
(
    OrganizationId int,
    OrganizationName varchar(255)
); 


CREATE TABLE tblApplication
(
     ApplicationId int,
     OrganizationId int,
     ApplicationName varchar(255)
);

CREATE TABLE tblBranches
(
    BranchId int, 
    OrganizationId int,
    BranchName varchar (255)
);

CREATE TABLE tblUsers
(
    userId int,
    OrganizationId int,
    UserName varchar(255)
);

這樣,約束將應用於所有表

ALTER TABLE [dbo].[tblBranchs] WITH CHECK 
    ADD CONSTRAINT [FK_tblBranchs_tblOrganization] 
    FOREIGN KEY([OrganizationId])
    REFERENCES [dbo].[tblOrganization] ([OrganizationId])

您不能在ASP.NET中“應用”此操作-這是數據庫問題 ,您需要更改外鍵約束以包括ON DELETE CASCADE諸如此類:

ALTER TABLE [dbo].[tblBranchs] WITH CHECK 
    ADD CONSTRAINT [FK_tblBranchs_tblOrganization] 
    FOREIGN KEY([OrganizationId])
    REFERENCES [dbo].[tblOrganization] ([OrganizationId])
        ON DELETE CASCADE

這意味着:如果刪除了tblOrganization的一行, tblOrganization該刪除操作也將向下級聯tblBranchs表中,同時刪除所有已引用該組織的行。 您可以在多個外鍵約束(直到tblUsers表)上具有這些ON DELETE CASCADE設置。

您需要將ON DELETE CASCADE添加到tblBranch,tblApplication和tblUsers的約束中:

ALTER TABLE [dbo].[tblBranchs] WITH CHECK 
    ADD CONSTRAINT [FK_tblBranchs_tblOrganization] 
    FOREIGN KEY([OrganizationId])
    REFERENCES [dbo].[tblOrganization] ([OrganizationId])
    ON DELETE CASCADE

ALTER TABLE [dbo].[tblApplication] WITH CHECK 
    ADD CONSTRAINT [FK_tblApplication_tblBranchs] 
    FOREIGN KEY([BranchId])
    REFERENCES [dbo].[tblBranchs] ([BranchId])
    ON DELETE CASCADE

ALTER TABLE [dbo].[tblUsers] WITH CHECK 
    ADD CONSTRAINT [FK_tblUsers_tblApplication] 
    FOREIGN KEY([ApplicationId])
    REFERENCES [dbo].[tblApplication] ([ApplicationId])
    ON DELETE CASCADE

現在,如果您刪除組織,數據庫引擎將自動刪除所有相關的子記錄:

  • 如果刪除組織,則所有與tblBranch,tblApplication和tblUsers有關的記錄都將被刪除。

  • 如果刪除分支,則將刪除所有來自tblApplication和tblUsers的相關記錄。

  • 如果刪除應用程序,則將從tblUsers中刪除的所有相關記錄。

  • 如果刪除用戶,則不會刪除任何其他內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM