[英]Cascading delete rows from multiple tables in SQL
I've got two tables with the following structure: 我有两个具有以下结构的表:
Person 人
Class 类
and some data: 和一些数据:
Person 人
1 name1
2 name2
3 name3
Class 类
1 1 3
2 1 1
3 1 2
4 2 1
Class
table can contain multiple rows related to one row from Person
. Class
表可以包含与Person
一行相关的多行。 PersonId
from Class
table is foreign key to Id
in Person
table. Class
表中的PersonId
是Person
表中Id
外键。 I'd like to delete data related to Person
with Id
1, so remove the 3 rows from Class
, and 1 row from Person
using one query. 我想删除与Id
1的Person
相关的数据,因此使用一个查询从Class
删除3行,并从Person
删除1行。
How can I do that in SQL? 如何在SQL中做到这一点?
Try This: 尝试这个:
CREATE TABLE [dbo].[Class](
[Id] [int] IDENTITY(1,1) NOT NULL,
[PersonId] [int] NULL,
[Sequence] [int] NULL,
CONSTRAINT [PK_Class] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Person] Script Date: 26-05-2014 07:54:26 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Person](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Person] [nchar](10) NULL,
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Class] WITH CHECK ADD CONSTRAINT [FK_Class_Person] FOREIGN KEY([PersonId])
REFERENCES [dbo].[Person] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[Class] CHECK CONSTRAINT [FK_Class_Person]
GO
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.