SQL 删除 ON DELETE CASCADE
在本文中,我们将介绍SQL中的ON DELETE CASCADE功能以及如何使用它来删除相关联的数据。
阅读更多:SQL 教程
什么是ON DELETE CASCADE?
在SQL中,ON DELETE CASCADE是一种用于在删除父表中的记录时自动删除相关子表中的记录的功能。这种级联删除可以避免数据不一致性的问题,同时也简化了开发人员的工作。
示例说明
为了更好地理解ON DELETE CASCADE的作用,我们将使用一个示例来说明。
假设我们有两个表,一个是”orders”表,另一个是”order_items”表。这两个表之间存在一对多的关系,即一个订单可以有多个订单项。
创建表
首先,我们创建”orders”表和”order_items”表。
CREATE TABLE orders (
id INT PRIMARY KEY,
order_number VARCHAR(20) NOT NULL
);
CREATE TABLE order_items (
id INT PRIMARY KEY,
order_id INT,
product_name VARCHAR(50) NOT NULL,
quantity INT NOT NULL,
FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE
);
在上面的例子中,”order_items”表中的”order_id”列是对”orders”表的外键引用。其中的FOREIGN KEY关键字指定了外键约束,并使用ON DELETE CASCADE来实现级联删除。
插入数据
接下来,我们插入一些示例数据以供操作。
INSERT INTO orders (id, order_number) VALUES (1, '2021001');
INSERT INTO orders (id, order_number) VALUES (2, '2021002');
INSERT INTO order_items (id, order_id, product_name, quantity) VALUES (1, 1, 'Product A', 2);
INSERT INTO order_items (id, order_id, product_name, quantity) VALUES (2, 1, 'Product B', 3);
INSERT INTO order_items (id, order_id, product_name, quantity) VALUES (3, 2, 'Product C', 1);
INSERT INTO order_items (id, order_id, product_name, quantity) VALUES (4, 2, 'Product D', 2);
查询数据
现在,我们来查询一下”orders”表和”order_items”表中的数据。
SELECT * FROM orders;
SELECT * FROM order_items;
查询结果如下所示:
orders表:
+----+--------------+
| id | order_number |
+----+--------------+
| 1 | 2021001 |
| 2 | 2021002 |
+----+--------------+
order_items表:
+----+----------+--------------+----------+
| id | order_id | product_name | quantity |
+----+----------+--------------+----------+
| 1 | 1 | Product A | 2 |
| 2 | 1 | Product B | 3 |
| 3 | 2 | Product C | 1 |
| 4 | 2 | Product D | 2 |
+----+----------+--------------+----------+
删除记录
现在,假设我们要删除”orders”表中id为1的订单。由于我们在”order_items”表中的外键约束上使用了ON DELETE CASCADE,所以与该订单相关联的订单项也将被自动删除。
DELETE FROM orders WHERE id = 1;
删除后再次查询数据,结果如下所示:
orders表:
+----+--------------+
| id | order_number |
+----+--------------+
| 2 | 2021002 |
+----+--------------+
order_items表:
+----+----------+--------------+----------+
| id | order_id | product_name | quantity |
+----+----------+--------------+----------+
| 3 | 2 | Product C | 1 |
| 4 | 2 | Product D | 2 |
+----+----------+--------------+----------+
可以看到,与id为1的订单相关联的订单项已经被自动删除了。
总结
通过使用SQL中的ON DELETE CASCADE功能,我们可以方便地实现在删除父表记录时级联删除相关子表记录的功能。这种功能可以避免数据不一致性的问题,并且简化了开发人员的工作。通过本文的示例,我们对ON DELETE CASCADE有了更深入的理解。希望这篇文章对您有所帮助!
极客教程