mysql 删除主表数据同时删除子表数据

mysql 删除主表数据同时删除子表数据

mysql 删除主表数据同时删除子表数据

在数据库中,通常会存在主表和子表的关系,例如订单表和订单详情表。当我们需要删除主表中的数据时,同时也需要删除对应的子表数据,以保持数据的一致性和完整性。本文将详细介绍在MySQL中如何删除主表数据同时删除子表数据。

设计数据库表结构

在进行操作之前,首先需要设计数据库表结构。我们以订单表和订单详情表为例,创建以下两张表:

订单表(orders)

字段名 类型 描述
id int 主键
order_no varchar(20) 订单号
create_time datetime 创建时间
total_price decimal(10,2) 订单总价

订单详情表(order_details)

字段名 类型 描述
id int 主键
order_id int 订单ID (外键)
product_id int 商品ID
quantity int 商品数量
price decimal(10,2) 商品单价

创建数据库表

在MySQL中创建上述两张表:

CREATE TABLE orders (
    id INT PRIMARY KEY,
    order_no VARCHAR(20),
    create_time DATETIME,
    total_price DECIMAL(10,2)
);

CREATE TABLE order_details (
    id INT PRIMARY KEY,
    order_id INT,
    product_id INT,
    quantity INT,
    price DECIMAL(10,2),
    FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE
);

order_details表中,我们设置了外键order_id引用orders表的id字段,并且设置了ON DELETE CASCADE,表示当主表的数据被删除时,对应的子表数据也会被自动删除。

删除主表数据同时删除子表数据

下面以实际案例演示如何在MySQL中删除主表数据同时删除子表数据。

添加示例数据

首先往orders表和order_details表中插入一些示例数据:

INSERT INTO orders (id, order_no, create_time, total_price) VALUES (1, '20220101001', '2022-01-01 10:00:00', 100.00);
INSERT INTO orders (id, order_no, create_time, total_price) VALUES (2, '20220102001', '2022-01-02 11:00:00', 200.00);

INSERT INTO order_details (id, order_id, product_id, quantity, price) VALUES (1, 1, 1, 2, 50.00);
INSERT INTO order_details (id, order_id, product_id, quantity, price) VALUES (2, 1, 2, 3, 20.00);
INSERT INTO order_details (id, order_id, product_id, quantity, price) VALUES (3, 2, 1, 1, 100.00);

删除主表数据同时删除子表数据

现在我们来删除orders表中id为1的订单数据,同时也会删除order_details表中对应的订单详情数据:

DELETE FROM orders WHERE id = 1;

删除后,查看order_details表:

SELECT * FROM order_details;

结果应该为:

| id | order_id | product_id | quantity | price |
|----|----------|------------|----------|-------|
| 3  | 2        | 1          | 1        | 100.00 |

从结果可以看出,order_details表中与order_id为1的订单数据已经被删除。

总结

在MySQL中,我们可以通过设置外键关联以及ON DELETE CASCADE来实现删除主表数据时同时删除子表数据的操作。这样可以确保数据库中的数据一致性和完整性,避免出现脏数据。在设计数据库表结构时,务必考虑到这一点,合理设置外键关联和约束条件,以便更好地管理数据。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程