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中文网其他相关文章!