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中文網其他相關文章!