MySQL - ON DELETE CASCADE



MySQL ON DELETE CASCADE 约束

MySQL 的ON DELETE CASCADE约束确保当父表中的一行被删除时,子表中所有相关的行也会被自动删除。此约束有助于维护通过外键关系连接的两个表之间的参照完整性。

如果不使用此约束,数据库服务器默认情况下会阻止我们删除表中的数据,如果这些数据被其他表引用。

示例

创建父表 -

首先,让我们使用以下查询创建名为PERSONS的父表 -

CREATE TABLE PERSONS(
   P_ID int primary key,
   P_NAME varchar(40),
   P_AGE int
);

现在,让我们使用如下所示的 INSERT 语句将一些值插入到上面创建的表中 -

INSERT INTO PERSONS VALUES 
(1, "Priya", 29),
(2, "Sarah", 20),
(3, "Varun", 26),
(4, "Dev", 25),
(5, "Ram", 31),
(6, "Aarohi", 34);

获得的 PERSONS 表如下所示 -

P_ID P_NAME P_AGE
1 Priya 29
2 Sarah 20
3 Varun 26
4 Dev 25
5 Ram 31
6 Aarohi 34

创建子表 -

现在,让我们创建一个名为 Films_watched 的子表,并使用 ON DELETE CASCADE 约束。在这个表中,P_ID 列是引用 Persons 表中 P_ID 列的外键 -

CREATE TABLE Films_watched (
   P_ID INT,
   F_NO INT,
   F_NAME varchar(40),
   PRIMARY KEY(P_ID,F_NO),
   FOREIGN KEY(P_ID)
   REFERENCES PERSONS(P_ID)
   ON DELETE CASCADE
);

现在,我们将行插入到 Films_watched 表中 -

INSERT INTO Films_watched VALUES 
(1, 130, "RRR"),
(2, 131, "Bahubali"),
(3, 132, "Pushpa"),
(3, 133, "KGF"),
(3, 134, "Salaar"),
(6, 135, "Karthikeya");

生成的 Films_watched 表如下所示 -

P_ID F_NO F_NAME
1 130 RRR
2 131 Bahubali
3 132 Pushpa
3 133 KGF
3 134 Salaar
6 135 Karthikeya

从父表中删除记录 -

正如我们在上表中看到的,我们有三个电影是由 P_ID = 3 的人观看的。在这里,我们将从 PERSONS(父)表中删除 P_ID = 3 的人 -

DELETE FROM PERSONS WHERE P_ID = 3;

以下是获得的输出 -

Query OK, 1 row affected (0.01 sec)

删除后,让我们检查 Persons 和 Films_watched 表中的数据。

从 Persons 表查询数据 -

要查看 Persons 表中剩余的记录,请使用以下 SELECT 查询 -

SELECT * FROM PERSONS;

我们可以在下表中看到,P_ID = 3 的行已被删除 -

P_ID P_NAME P_AGE
1 Priya 29
2 Sarah 20
4 Dev 25
5 Ram 31
6 Aarohi 34

从 Films_watched 表查询数据 -

最后,您可以检查 Films_watched 表中的数据 -

SELECT * FROM Films_watched;

输出

我们可以在下面的输出中看到,所有与 P_ID = 3 相关的记录都已被自动删除 -

P_ID F_NO F_NAME
1 130 RRR
2 131 Bahubali
6 135 Karthikeya
广告
© . All rights reserved.