MySQL ON DELETE CASCADE

2025年3月17日 | 阅读 3 分钟

MySQL 中的 ON DELETE CASCADE 子句用于在删除父表中的行时,自动删除子表中匹配的记录。这是一种与外键相关的引用操作。

假设我们创建了两个表,并通过外键建立了关系,将这两个表分别设为父表和子表。接下来,我们为其中一个外键定义 ON DELETE CASCADE 子句,以便在另一个表成功执行级联操作。如果 ON DELETE CASCADE 仅为一个外键子句定义,级联操作将抛出错误。

MySQL ON DELETE CASCADE 示例

让我们了解如何在 MySQL 表中使用 ON DELETE CASCADE 子句。首先,我们将创建两个名为Employee 和 Payment的表。这两个表通过一个外键与 on delete cascade 操作相关联。在这里,Employee 是父表,Payment 是子表。以下脚本创建了这两个表及其记录。

表:Employee

以下语句创建 Employee 表

接下来,执行插入查询以填充记录。

执行 SELECT 查询以验证表中的数据,结果如下所示

MySQL ON DELETE CASCADE

表:Payment

下面的语句创建 Payment 表

接下来,执行 INSERT 语句以填充表中的记录。

执行 SELECT 查询以验证表中的数据,结果如下所示

MySQL ON DELETE CASCADE

现在,我们来删除父表 Employee 中的数据。为此,请执行以下语句

上述语句将删除emp_id = 102的员工记录,以及子表中引用该记录的数据。我们可以使用 SELECT 语句验证数据,这将给出以下输出

MySQL ON DELETE CASCADE

在上面的输出中,我们可以看到所有引用 emp_id = 102 的行都已从两个表中自动删除。

如何查找受 ON DELETE CASCADE 操作影响的表?

有时,在从表中删除记录之前,我们想知道受 ON DELETE CASCADE 引用操作影响的表。我们可以通过查询 information_schema 数据库中的 referential_constraints 来获取此信息,如下所示

下面的语句将生成关于在employeedb数据库中与 Employee 表关联并具有 ON DELETE CASCADE 规则的表的查询结果

执行上述命令后,我们将获得以下输出

MySQL ON DELETE CASCADE

MySQL ON UPDATE CASCADE

MySQL 中的 ON UPDATE CASCADE 子句用于在更新父表中的行时,自动更新子表中匹配的记录。以下示例更清楚地说明了这一点。

首先,我们需要使用ALTER TABLE语句将 ON UPDATE CASCADE 子句添加到 Payment 表中,如下所示

它将提供以下输出

MySQL ON DELETE CASCADE

在下面的脚本中,我们将更新父表中的员工 ID,它也将自动反映到子表中

通过验证 Employee 和 Payment 表的内容,我们将看到emp_id列的值已成功更新。

MySQL ON DELETE CASCADE
下一主题MySQL UPSERT