MySQL - ON DELETE CASCADE



MySQL ON DELETE CASCADE 约束

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

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

示例

创建父表 -

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

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

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

Open Compiler
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 列的外键 -

Open Compiler
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 表中 -

Open Compiler
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 的人 -

Open Compiler
DELETE FROM PERSONS WHERE P_ID = 3;

以下是获得的输出 -

Query OK, 1 row affected (0.01 sec)

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

从 Persons 表查询数据 -

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

Open Compiler
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
广告