Mysql 简明教程

MySQL - On Delete Cascade

The MySQL ON DELETE CASCADE Constraint

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

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

Example

Creating the Parent Table −

首先,让我们使用以下查询创建名称为 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表如下所示——

Creating the Child Table −

现在,让我们创建一个名为 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 表如下 −

Deleting a Record from the Parent Table −

正如我们在上面的表中看到的,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 表中的数据。

Querying Data from the Persons Table −

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

SELECT * FROM PERSONS;

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

Querying Data from the Films_watched Table −

最后,你可以检查 Films_watched 表中的数据 −

SELECT * FROM Films_watched;

Output

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