Kekangan Kunci Asing MySQL dengan Cascade Delete
Kekangan kunci asing memainkan peranan penting dalam mengekalkan integriti data dan menghalang anak yatim dalam pangkalan data hubungan. Dalam MySQL, anda boleh menggunakan pilihan ON DELETE CASCADE untuk memastikan bahawa apabila anda memadamkan rekod induk, rekod anak yang berkaitan akan dipadamkan secara automatik juga.
Untuk menyediakan kekangan kunci asing dengan pemadaman lata, pertimbangkan perkara berikut jadual:
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;
Dalam persediaan ini, produk mempunyai kategori rujukan kunci asing dan ON DELETE CASCADE ditentukan untuk memadamkan produk secara automatik apabila kategori yang dirujuk dipadamkan. Walau bagaimanapun, lata ini hanya akan menjejaskan rekod dalam categories_products di mana category_id sepadan dengan kategori yang dipadamkan.
Contohnya, jika anda mempunyai data berikut:
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 | +------------+-------------+
Jika anda memadamkan 'merah' kategori:
DELETE FROM categories WHERE (id = 1);
Jadual produk tidak akan terjejas kerana lata hanya terpakai pada jadual kategori_produk. Akibatnya, data akan menjadi:
categories: +----+------+ | id | name | +----+------+ | 2 | blue | +----+------+ products: +----+---------+------+ | id | name | category_id | +----+---------+------+ | 2 | boots | 1 | | 3 | gloves | 2 | +----+---------+------+ categories_products: +------------+-------------+ | category_id | product_id | +------------+-------------+ | 2 | 3 | +------------+-------------+
Susunan ini memastikan anda boleh mengekalkan integriti rujukan sambil mengelakkan pemadaman tidak sengaja rekod yang tidak berkaitan.
Atas ialah kandungan terperinci Bagaimanakah ON DELETE CASCADE Mempengaruhi Jadual Berkaitan dalam Kekangan Utama Asing MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!