繁体   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