如果我在数据库中有两个关系,如下所示:
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
);
我在两者之间建立了一个外键关系,如下所示:
ALTER TABLE BookCourses
ADD FOREIGN KEY (Course)
REFERENCES Courses(Code)
ON DELETE CASCADE;
然后,您可以看到BookCourses
关系中的Course
属性引用了Courses
关系中的Code
属性。
我的问题是,当两个关系中的任何一个发生删除时,删除会以哪种方式级联?如果我删除Courses
关系中的元组,它会删除BookCourses
关系中的所有引用元组,还是相反?
发布于 2012-11-19 05:38:38
当您删除表Courses
上的某些内容时,Cascade将起作用。表BookCourses
上引用了表Courses
的任何记录都将被自动删除。
但是,当您尝试对表BookCourses
执行删除操作时,只会影响表本身,而不会影响Courses
后续问题:为什么在表类别上有CourseID
?
也许你应该把你的模式重新组织成这样,
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;
发布于 2018-08-22 19:52:01
这是一个简单的例子,供其他访问这个旧帖子的人使用,但被问题和另一个答案中的例子搞糊涂了:
Delivery -> Package (One -> Many)
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)中的被引用实体一起删除。
因此,当一个交付被删除时,引用它的包也将被删除。如果包被删除,则任何交付都不会发生任何变化。
https://stackoverflow.com/questions/13444859
复制相似问题