在 MySQL 中使用 ON DELETE CASCADE约束在删除父表中的行时自动从子表中删除行。例如,当学生在在线学习平台上注册时,该学生的所有详细信息都会以其唯一编号/ID 记录。这些在线学习平台上的所有课程都有自己的代码、标题和名称。学生可以根据自己的意愿报读任何课程。
没有规定所有学生必须注册所有课程,或者他们必须在同一日期参加课程。一个学生可以注册一门或多门课程。假设您从“Student”表中删除了一行,现在您还想删除“Enroll”表中引用“Student”表中的行的所有行。为此,我们需要 ON DELETE CASCADE。下面是解释 ON DELETE CASCADE 引用操作如何工作的步骤。
步骤 1:创建学生表
CREATE TABLE Student (
sno INT PRIMARY KEY,
sname VARCHAR(20),
age INT
);
第 2 步:将行插入到 学生桌
INSERT INTO Student(sno, sname,age)
VALUES(1,'Ankit',17),
(2,'Ramya',18),
(3,'Ram',16);
第 3 步:执行 SELECT查询以检查STUDENT表中的数据。
SELECT *
FROM Student;
输出:
sno | sname | age |
---|---|---|
1 | Ankit | 17 |
2 | Ramya | 18 |
3 | Ram | 16 |
步骤 4:创建课程表
CREATE TABLE Course (
cno INT PRIMARY KEY,
cname VARCHAR(20)
);
第 5 步:将行插入 课程表
INSERT INTO Course(cno, cname)
VALUES(101,'c'),
(102,'c++'),
(103,'DBMS');
第 6 步:执行 SELECT查询以检查Course表中的数据。
SELECT *
FROM Course;
输出:
cno | cname |
---|---|
101 | c |
102 | c++ |
103 | DBMS |
步骤 7:创建Enroll表
CREATE TABLE Enroll (
sno INT,
cno INT,
jdate date,
PRIMARY KEY(sno,cno),
FOREIGN KEY(sno)
REFERENCES Student(sno)
ON DELETE CASCADE
FOREIGN KEY(cno)
REFERENCES Course(cno)
ON DELETE CASCADE
);
第 8 步:将行插入到 登记表
INSERT INTO Enroll(sno,cno,jdate)
VALUES(1, 101, '5-jun-2021'),
(1, 102, '5-jun-2021'),
(2, 103, '6-jun-2021');
第 9 步:执行 SELECT查询以检查Enroll表中的数据。
SELECT *
FROM Enroll;
输出:
sno | cno | jdate |
---|---|---|
1 | 101 | 5-jun-2021 |
1 | 102 | 5-jun-2021 |
2 | 103 | 6-jun-2021 |
步骤 10 :这里的父表是Student和Course而子表是Enroll 。如果学生退出课程或课程从提供列表中删除,它也必须影响子表。
DELETE FROM Student
WHERE sname="Ramya";
第 11 步:执行 SELECT查询来检查数据。
Select * from Student;
输出:
sno | sname | age |
---|---|---|
1 | Ankit | 17 |
3 | Ram | 16 |
Select * from Enroll;
输出:
sno | cno | jdate |
---|---|---|
1 | 101 | 5-jun-2021 |
1 | 102 | 5-jun-2021 |
当您删除父表中 sno=2 的内容时,它也会自动从子表中删除 sno=2 的详细信息。同样,如果您从 Course 表中删除一门课程,它会自动删除子表 Enroll 中该课程的行。这是因为指定了外键约束 ON DELETE CASCADE。