[英]Delete All the records Using FOREIGN KEY Constraints if Main Table Entity is deleted
如果主表的实体被删除,因为在所有表上都施加了约束,那么如何从多个表中删除记录
情境
让我给你一个场景:这个主表叫做Organization
或TblOrganization
。 该组织的分支位于名为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.