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;