📜  MySQL – ON DELETE CASCADE 约束(1)

📅  最后修改于: 2023-12-03 15:03:05.368000             🧑  作者: Mango

MySQL – ON DELETE CASCADE 约束

在MySQL中,当你有一个表与另一个表有关联时,你可以使用外键来保持数据的完整性。外键是指一个表中的一个或多个列,这些列引用另一个表中的一个或多个列。在MySQL中,可以通过使用“ON DELETE CASCADE”选项来创建外键,以确保在删除父表中的一行时会自动删除相关子表中的行。

创建一个新的表和外键

首先,让我们创建一个名为“orders”的新表,该表将具有一个自增的订单ID,一个客户ID和一个订单日期。然后我们将创建一个名为“order_items”的子表,该表将包含产品信息和数量,并将使用“ON DELETE CASCADE”定义外键以确保与父表的数据同步。

CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    customer_id INT NOT NULL,
    order_date DATE NOT NULL,
    CONSTRAINT fk_orders_customers
        FOREIGN KEY (customer_id) 
        REFERENCES customers(customer_id)
        ON DELETE CASCADE
);

CREATE TABLE order_items (
    order_item_id INT AUTO_INCREMENT PRIMARY KEY,
    order_id INT NOT NULL,
    product_name VARCHAR(50) NOT NULL,
    quantity INT NOT NULL,
    CONSTRAINT fk_order_items_orders 
        FOREIGN KEY (order_id)
        REFERENCES orders(order_id)
        ON DELETE CASCADE
);
外键约束的作用

这里,我们定义了两个表:orders和order_items。orders表具有一个自增的订单ID、一个客户ID和一个订单日期。order_items表具有一个自增的订单项ID,一个订单ID,产品名称和一个数量。

我们将使用“ON DELETE CASCADE”定义外键,以便在删除“orders”表中的订单时,相关的“order_items”表中的行也将被删除。这可以确保数据在删除操作之后保持同步,防止出现数据不一致的情况。

删除父表中的行

现在,让我们假设我们有一个名为“customers”的表,它与“orders”表有关联。如果我们删除一个顾客,它将自动删除与该顾客相关的所有订单,这将导致与该订单相关的所有订单项被自动删除。

DELETE FROM customers WHERE customer_id = 1;

这将删除ID为1的客户,并自动删除与该客户相关的所有订单和订单项。

结论

通过使用“ON DELETE CASCADE”选项,您可以创建外键,使您的数据在删除操作中保持同步,确保数据的完整性。这可以大大简化数据库维护的过程。