首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL ON DELETE CASCADE,删除是以哪种方式发生的?

SQL ON DELETE CASCADE,删除是以哪种方式发生的?
EN

Stack Overflow用户
提问于 2012-11-19 05:36:01
回答 2查看 184.8K关注 0票数 156

如果我在数据库中有两个关系,如下所示:

代码语言:javascript
复制
CREATE TABLE Courses (
  CourseID int NOT NULL PRIMARY KEY,
  Course VARCHAR(63) NOT NULL UNIQUE,
  Code CHAR(4) NOT NULL UNIQUE
);

CREATE TABLE BookCourses (
  EntryID int NOT NULL PRIMARY KEY,
  BookID int NOT NULL,
  Course CHAR(4) NOT NULL,
  CourseNum CHAR(3) NOT NULL,
  CourseSec CHAR(1) NOT NULL
);

我在两者之间建立了一个外键关系,如下所示:

代码语言:javascript
复制
ALTER TABLE BookCourses
ADD FOREIGN KEY (Course)
REFERENCES Courses(Code)
ON DELETE CASCADE;

然后,您可以看到BookCourses关系中的Course属性引用了Courses关系中的Code属性。

我的问题是,当两个关系中的任何一个发生删除时,删除会以哪种方式级联?如果我删除Courses关系中的元组,它会删除BookCourses关系中的所有引用元组,还是相反?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-19 05:38:38

当您删除表Courses上的某些内容时,Cascade将起作用。表BookCourses上引用了表Courses的任何记录都将被自动删除。

但是,当您尝试对表BookCourses执行删除操作时,只会影响表本身,而不会影响Courses

后续问题:为什么在表类别上有CourseID

也许你应该把你的模式重新组织成这样,

代码语言:javascript
复制
CREATE TABLE Categories 
(
  Code CHAR(4) NOT NULL PRIMARY KEY,
  CategoryName VARCHAR(63) NOT NULL UNIQUE
);

CREATE TABLE Courses 
(
  CourseID INT NOT NULL PRIMARY KEY,
  BookID INT NOT NULL,
  CatCode CHAR(4) NOT NULL,
  CourseNum CHAR(3) NOT NULL,
  CourseSec CHAR(1) NOT NULL,
);

ALTER TABLE Courses
ADD FOREIGN KEY (CatCode)
REFERENCES Categories(Code)
ON DELETE CASCADE;
票数 187
EN

Stack Overflow用户

发布于 2018-08-22 19:52:01

这是一个简单的例子,供其他访问这个旧帖子的人使用,但被问题和另一个答案中的例子搞糊涂了:

Delivery -> Package (One -> Many)

代码语言:javascript
复制
CREATE TABLE Delivery(
    Id INT IDENTITY PRIMARY KEY,
    NoteNumber NVARCHAR(255) NOT NULL
)

CREATE TABLE Package(
    Id INT IDENTITY PRIMARY KEY,
    Status INT NOT NULL DEFAULT 0,
    Delivery_Id INT NOT NULL,
    CONSTRAINT FK_Package_Delivery_Id FOREIGN KEY (Delivery_Id) REFERENCES Delivery (Id) ON DELETE CASCADE
)

带有外键包( Delivery_Id )的条目将与FK关系(Delivery)中的被引用实体一起删除。

因此,当一个交付被删除时,引用它的包也将被删除。如果包被删除,则任何交付都不会发生任何变化。

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13444859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档