MySQL 如何在 MySQL Workbench 中设置级联删除?

MySQL 如何在 MySQL Workbench 中设置级联删除?

在实际数据库应用中,经常需要删除具有依赖关系的记录,这时就需要使用级联删除(Cascading Deletes)了。级联删除是指在删除某个表的记录时,自动删除与该记录相关联的其他表中的记录。在 MySQL 中,可以通过设置外键关系来实现级联删除。在 MySQL Workbench 中,也可以通过一些简单的设置来实现级联删除。本文将介绍在 MySQL Workbench 中如何设置级联删除。

阅读更多:MySQL 教程

什么是级联删除?

在 MySQL 数据库中,关系型数据库模型通常使用外键(Foreign Key)来实现数据表之间的关系。通常,我们在创建数据库时会定义表之间的关系。当我们删除主表的记录时,如果子表的记录还依赖于主表中的某个记录,则需要进行级联删除,否则会造成数据的不完整性,影响后续业务逻辑。

例子说明

以一个图书管理系统为例。我们有两个表:bookborrowbook 表保存了书籍的信息,borrow表保存了借阅记录。当图书从 book 表中删除时,如果有对应的借阅记录存在于 borrow 表中,则需要一起删除,否则会造成数据不一致。可以通过级联删除来实现这一操作。

下面是两张表的表结构:

CREATE TABLE book (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(20) DEFAULT '' COMMENT '书名',
  author VARCHAR(20) DEFAULT '' COMMENT '作者'
);

CREATE TABLE borrow (
  id INT PRIMARY KEY AUTO_INCREMENT,
  book_id INT COMMENT '书籍ID',
  user_id INT COMMENT '借阅者ID',
  borrow_time DATETIME COMMENT '借阅时间',
  return_time DATETIME COMMENT '归还时间',
  FOREIGN KEY (book_id) REFERENCES book(id) ON DELETE CASCADE ON UPDATE CASCADE
);
Mysql

borrow 表中,我们通过外键约束将 book_idbook 表中的 id 值绑定在一起,同时,在外键约束中,我们通过设置 ON DELETE CASCADE 来实现级联删除的功能。当我们从 book 表中删除某个记录时,所有与其对应的 borrow 表中的记录都会自动删除。

例如,我们现在有以下 book 表和 borrow 表:

+----+-----------------+--------+
| id | name            | author |
+----+-----------------+--------+
|  1 | Introduction to Python | Jack |
|  2 | How to use MySQL      | Tom   |
|  3 | Database Design     | Kyle  |
+----+-----------------+--------+

+----+---------+---------+---------------------+---------------------+
| id | book_id | user_id | borrow_time         | return_time         |
+----+---------+---------+---------------------+---------------------+
|  1 |       1 |     100 | 2021-09-01 10:00:00 | 2021-09-05 10:00:00 |
|  2 |       1 |     101 | 2021-09-02 10:00:00 | 2021-09-06 10:00:00 |
|  3 |       3 |     200 | 2021-09-03 10:00:00 | 2021-09-07 10:00:00 |
|  4 |       2 |     101 | 2021-09-04 10:00:00 | 2021-09-08 10:00:00 |
+----+---------+---------+---------------------+---------------------+
Mysql

现在,我们想要删除 book 表中 id 为 1 的记录,我们只需要执行以下 SQL 语句:

DELETE FROM book WHERE id=1;
Mysql

当我们执行完之后,我们可以发现,与 book 表中 id 为 1 的记录相关联的所有 borrow中的记录也被自动删除,执行完删除操作后,borrow` 表中的数据变成了:

+----+---------+---------+---------------------+---------------------+
| id | book_id | user_id | borrow_time         | return_time         |
+----+---------+---------+---------------------+---------------------+
|  3 |       3 |     200 | 2021-09-03 10:00:00 | 2021-09-07 10:00:00 |
|  4 |       2 |     101 | 2021-09-04 10:00:00 | 2021-09-08 10:00:00 |
+----+---------+---------+---------------------+---------------------+
Mysql

在删除 book 表中 id 为 1 的记录时,自动删除与其相关联的 borrow 表中的记录,这就是级联删除的作用。

如何设置级联删除?

在 MySQL Workbench 中,我们可以通过设置外键约束的方式来实现级联删除。下面,我们将一步步演示如何设置级联删除。

第一步:创建表并添加外键约束

在 MySQL Workbench 中,我们可以通过“表结构设计器”(Table Designer)来创建表以及添加外键约束。我们首先在“表”栏中选择我们要添加外键约束的表(在本例中是 borrow 表),然后点击“Table Designer”按钮进入表结构设计器。

在表结构设计器中,我们可以添加、删除、修改字段,也可以设置外键约束等操作。我们现在要添加外键约束,可以看到在表结构设计器的左下角有一个“Foreign Keys”(外键)的按钮,我们点击它,就可以添加外键约束了。

在添加外键约束之前,我们先来了解一下外键约束的概念:

  • 外键:指一张表中的某个字段,它和另一张表中的某个字段相对应,建立了关联关系。
  • 约束:指在数据库中定义的限制条件,用于保证数据的完整性和一致性。

在 MySQL 中,外键约束可以帮助我们保证数据的一致性和完整性。在添加外键约束时,我们需要注意以下几点:

  • 外键约束是关系型数据库中的约束条件,它的作用是保持数据完整性。
  • 外键约束可以在一个表中(主表)定义,而在另一个表中(从表)进行参照。
  • 外键约束允许将一个表中的一个字段(或多个字段),作为另一个表中的字段(或多个字段)的参照。

下面是如何设置外键约束的步骤:

  1. 在“Foreign Keys”栏中点击“Add Foreign Key”按钮,打开“Foreign KeyEditor”窗口。

  2. 在“Foreign KeyEditor”窗口中,我们需要确定两个重要的内容:

  • 外键名:指外键约束的名称,作为外键约束的唯一标识。可以根据自己的需要来进行命名。示例中是borrow_ibfk_1
  • 参照表:指参照当前表的主键的表。在本例中,borrow表的外键参照的是book表的主键。
  1. 在“Foreign KeyEditor”窗口中,我们需要定义本表中的字段与参照表中的字段之间的对应关系。在本例中,borrow表中的book_id字段要对应book表中的id字段。

  2. 在“Foreign KeyEditor”窗口中,我们还要定义当主表记录被删除或更新时,从表中的记录如何处理。在本例中,我们选择“ON DELETE CASCADE”选项,表示当book表中的记录被删除时,borrow表中的相关记录也将自动被删除。

第二步:应用级联删除

在完成外键约束的设置之后,我们需要保存并应用设置,这样,我们就可以使用级联删除功能了。

  1. 在“Foreign Keys”栏中点击“Apply”按钮,保存外键约束的设置。

  2. 在表结构设计器中点击“Apply”按钮,将表结构应用到数据库中。

现在,我们已经完成了级联删除的设置。当我们从 book 表中删除某个记录时,与其相关联的 borrow 表中的记录也会被自动删除。

总结

通过 MySQL Workbench 中的外键约束,我们可以实现级联删除的功能,保证数据库中记录的完整性和一致性。在设置外键约束时,我们需要注意外键名、参照表、字段对应关系以及删除/更新时的处理方式。在实际项目开发中,合理地设置外键约束、使用级联删除功能,可以提高数据处理的效率和可靠性,使我们的项目更加稳定和高效。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册