首页 > 数据库 > mysql教程 > ON DELETE CASCADE 如何影响 MySQL 外键约束中的相关表?

ON DELETE CASCADE 如何影响 MySQL 外键约束中的相关表?

Susan Sarandon
发布: 2024-12-15 05:43:08
原创
541 人浏览过

How Does ON DELETE CASCADE Affect Related Tables in MySQL Foreign Key Constraints?

MySQL 外键约束与级联删除

外键约束在维护数据完整性和防止关系数据库中的孤儿数据方面发挥着至关重要的作用。在 MySQL 中,您可以使用 ON DELETE CASCADE 选项来确保当您删除父记录时,相关的子记录也会自动删除。

要使用级联删除设置外键约束,请考虑以下内容rows:

CREATE TABLE categories (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(255) DEFAULT NULL
) ENGINE=InnoDB;

CREATE TABLE products (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(255) DEFAULT NULL,
    category_id INT NOT NULL
) ENGINE=InnoDB;

CREATE TABLE categories_products (
    category_id INT NOT NULL,
    product_id INT NOT NULL,
    PRIMARY KEY (category_id, product_id)
) ENGINE=InnoDB;

ALTER TABLE products
ADD FOREIGN KEY (category_id) REFERENCES categories (id)
ON DELETE CASCADE;
登录后复制

在此设置中,产品有一个外键引用类别,并且指定 ON DELETE CASCADE 在删除引用的类别时自动删除产品。但是,此级联只会影响categories_products中的category_id与已删除类别匹配的记录。

例如,如果您有以下数据:

categories:
+----+------+
| id | name |
+----+------+
| 1  | red  |
| 2  | blue |
+----+------+

products:
+----+---------+------+
| id | name    | category_id |
+----+---------+------+
| 1  | mittens | 1           |
| 2  | boots   | 1           |
| 3  | gloves  | 2           |
+----+---------+------+

categories_products:
+------------+-------------+
| category_id | product_id |
+------------+-------------+
| 1          | 1           |
| 1          | 2           |
| 2          | 3           |
+------------+-------------+
登录后复制

如果删除“红色” category:

DELETE FROM categories WHERE (id = 1);
登录后复制

产品表不会受到影响,因为级联仅适用于categories_products表。结果,数据将变成:

categories:
+----+------+
| id | name |
+----+------+
| 2  | blue |
+----+------+

products:
+----+---------+------+
| id | name    | category_id |
+----+---------+------+
| 2  | boots   | 1           |
| 3  | gloves  | 2           |
+----+---------+------+

categories_products:
+------------+-------------+
| category_id | product_id |
+------------+-------------+
| 2          | 3           |
+------------+-------------+
登录后复制

这种安排可确保您可以保持引用完整性,同时避免无意删除不相关的记录。

以上是ON DELETE CASCADE 如何影响 MySQL 外键约束中的相关表?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板