📅  最后修改于: 2023-12-03 14:44:31.653000             🧑  作者: Mango
在MySQL中,级联删除是一项强大的功能,允许在父表中删除记录时自动删除关联的子表中的相关记录。本文将介绍如何使用MySQL进行级联删除。
要使用级联删除功能,需要在建立关系的时候开启级联删除选项。例如,我们有一个orders
表和一个order_items
表,它们之间的关系是一个订单可以有多个订单项。我们可以使用以下SQL语句来创建这些表:
CREATE TABLE orders (
id INT(11) NOT NULL AUTO_INCREMENT,
customer_id INT(11) NOT NULL,
order_date DATE NOT NULL,
PRIMARY KEY (id),
KEY customer_id (customer_id),
FOREIGN KEY (customer_id) REFERENCES customers (id)
ON DELETE CASCADE
) ENGINE=InnoDB;
CREATE TABLE order_items (
id INT(11) NOT NULL AUTO_INCREMENT,
order_id INT(11) NOT NULL,
product_id INT(11) NOT NULL,
quantity INT(11) NOT NULL,
PRIMARY KEY (id),
KEY order_id (order_id),
KEY product_id (product_id),
FOREIGN KEY (order_id) REFERENCES orders (id)
ON DELETE CASCADE,
FOREIGN KEY (product_id) REFERENCES products (id)
ON DELETE CASCADE
) ENGINE=InnoDB;
在上面的SQL语句中,我们在创建orders
表时使用了ON DELETE CASCADE
选项,表示在删除orders
表中的记录时,将同时删除关联的order_items
表中的记录。
现在,我们来演示一下级联删除的使用方法。假设我们有一个订单,它有两个订单项。我们可以使用以下SQL语句来查询这个订单及其订单项:
SELECT *
FROM orders
JOIN order_items ON orders.id = order_items.order_id
WHERE orders.id = 1;
查询结果如下:
+----+-------------+------------+----+---------+------------+
| id | customer_id | order_date | id | order_id | product_id |
+----+-------------+------------+----+---------+------------+
| 1 | 1 | 2020-01-01 | 1 | 1 | 1 |
| 1 | 1 | 2020-01-01 | 2 | 1 | 2 |
+----+-------------+------------+----+---------+------------+
现在,我们想从orders
表中删除这个订单记录并进行级联删除。我们可以使用以下SQL语句:
DELETE FROM orders WHERE id = 1;
执行这个SQL语句后,我们再次查询orders
表和order_items
表,可以发现与这个订单相关的订单项也已经被删除了:
SELECT * FROM orders;
+----+-------------+------------+
| id | customer_id | order_date |
+----+-------------+------------+
| 2 | 2 | 2020-02-01 |
+----+-------------+------------+
SELECT * FROM order_items;
+----+---------+------------+----------+
| id | order_id | product_id | quantity |
+----+---------+------------+----------+
| 3 | 2 | 3 | 10 |
+----+---------+------------+----------+
级联删除是MySQL中非常有用的一项功能,可以在删除父表中的记录时同步删除关联的子表中的记录。使用级联删除需要在建立关系时开启级联删除选项。在实际应用中,要谨慎使用级联删除功能,以避免误删除数据。