简体   繁体   English

从SQL中的多个表级联删除行

[英]Cascading delete rows from multiple tables in SQL

I've got two tables with the following structure: 我有两个具有以下结构的表:

Person

  • Id ID
  • Name 名称

Class

  • Id ID
  • PersonId 人名
  • Sequence 序列

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表中的PersonIdPerson表中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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM