Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencegah Pemadaman Bertingkat dalam Hubungan Ibu Bapa-Anak MySQL?
Hadkan Pemadaman Lata untuk Hubungan Jadual Ibu Bapa-Anak
Apabila menggunakan kunci asing untuk mengekalkan integriti data dalam MySQL, adalah penting untuk memahami kesannya pemadaman melata. Klausa "ON DELETE CASCADE" membenarkan anda memadamkan rekod anak secara automatik apabila rekod induk dipadamkan. Walau bagaimanapun, jika anda perlu menghalang pemadaman berlatarkan yang akan mengakibatkan rekod anak yatim piatu, anda mesti mengkonfigurasi kunci asing anda dengan teliti.
Contoh: Hubungan Kategori-Produk
Pertimbangkan jadual contoh berikut:
CREATE TABLE categories ( id INT PRIMARY KEY, name VARCHAR(255) ); CREATE TABLE products ( id INT PRIMARY KEY, name VARCHAR(255) ); CREATE TABLE categories_products ( category_id INT, product_id INT, PRIMARY KEY (category_id, product_id), FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE ON UPDATE CASCADE );
Jika anda memadamkan kategori, ia biasanya akan lata dan padamkan semua produk yang dikaitkan dengan kategori itu, tidak kira sama ada produk tersebut tergolong dalam kategori lain juga.
Penyediaan Kunci Asing yang Betul
Untuk mengelakkan lata yang tidak diingini ini tingkah laku, anda mesti mengubah suai definisi kunci asing pada jadual categories_products:
CREATE TABLE categories_products ( category_id INT, product_id INT, PRIMARY KEY (category_id, product_id), FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE ON UPDATE CASCADE );
Dengan menukar peraturan ON DELETE kepada SET NULL, anda mengarahkan MySQL untuk menetapkan lajur category_id dalam jadual categories_products kepada NULL apabila kategori dipadamkan. Ini akan mengalih keluar perkaitan antara kategori dan produk, tetapi ia tidak akan memadamkan produk itu sendiri.
Lata Terpilih
Pendekatan ini memastikan pemadaman kategori hanya akan lata dan padamkan produk yang dikaitkan secara eksklusif dengan kategori itu. Produk yang tergolong dalam berbilang kategori akan kekal tidak terjejas.
Sebagai contoh, pertimbangkan data berikut:
categories: products: +----+---------+ +----+--------+ | id | name | | id | name | +----+---------+ +----+--------+ | 1 | Apparel | | 1 | Shirt | | 2 | Electronics | | 2 | Phone | +----+---------+ +----+--------+ categories_products: +------------+-------------+ | product_id | category_id | +------------+-------------+ | 1 | 1 | // Apparel - Shirt | 1 | 2 | // Electronics - Shirt | 2 | 2 | // Electronics - Phone +------------+-------------+
Jika anda memadamkan kategori Pakaian, ia hanya akan memadamkan entri Pakaian - Baju daripada jadual kategori_produk. Produk baju (id = 1) akan tetap wujud kerana ia turut dikaitkan dengan kategori Elektronik.
Atas ialah kandungan terperinci Bagaimana untuk Mencegah Pemadaman Bertingkat dalam Hubungan Ibu Bapa-Anak MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!