Rumah >pangkalan data >tutorial mysql >Bagaimanakah MySQL's ON DELETE CASCADE Mengendalikan Perhubungan Utama Asing dan Menghalang Rekod Anak Yatim?

Bagaimanakah MySQL's ON DELETE CASCADE Mengendalikan Perhubungan Utama Asing dan Menghalang Rekod Anak Yatim?

Patricia Arquette
Patricia Arquetteasal
2024-12-12 13:12:17983semak imbas

How Does MySQL's ON DELETE CASCADE Handle Foreign Key Relationships and Prevent Orphan Records?

Cascading Delete dengan MySQL Foreign Key Constraints

Memastikan integriti data dan mencegah rekod anak yatim adalah penting dalam pengurusan pangkalan data hubungan. Untuk mencapai matlamat ini, MySQL menawarkan kekangan kunci asing yang berkuasa dengan pemadaman berlatarkan.

Mencipta Kekangan Kunci Asing dengan DELETE ON CASCADE

Untuk mewujudkan hubungan kunci asing dengan pemadaman berlata , gunakan sintaks berikut:

FOREIGN KEY (foreign_column) REFERENCES table (primary_key)
ON DELETE CASCADE
ON UPDATE CASCADE

Dalam contoh anda, anda mempunyai yang berikut jadual:

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

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

CREATE TABLE categories_products (
    category_id INT NOT NULL,
    product_id INT NOT NULL,
    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
) ENGINE=InnoDB;

Memahami Pemadaman Lata

Apabila anda memadamkan rekod daripada jadual kategori, sistem akan memadam secara automatik sebarang rekod yang berkaitan dalam jadual categories_products di mana category_id sepadan dengan kategori yang dipadamkan. Walau bagaimanapun, pemadaman tidak akan mengalir lebih jauh ke jadual produk kerana tiada hubungan kunci asing yang ditentukan di sana.

Sebagai contoh, jika anda memadamkan kategori 'biru', rekod berikut dalam kategori_produk akan dipadamkan:

(blue, mittens)
(blue, boots)

Tetapi produk 'but' dan 'sarung tangan' akan kekal utuh dalam produk jadual.

Mencegah Kehilangan Data Tidak Disengajakan

Untuk mengelakkan potensi kehilangan data, adalah penting untuk mempertimbangkan dengan teliti kesan pemadaman berlatarkan sebelum melaksanakannya. Contohnya, dalam senario yang anda nyatakan, jika anda memadamkan kategori yang turut dikaitkan dengan produk lain, produk tersebut juga akan dipadamkan.

Oleh itu, adalah penting untuk menilai kemungkinan akibat dengan teliti dan mentakrifkan perhubungan dengan jelas. antara jadual anda untuk memastikan pemadaman bertingkat tidak menjejaskan integriti data anda.

Atas ialah kandungan terperinci Bagaimanakah MySQL's ON DELETE CASCADE Mengendalikan Perhubungan Utama Asing dan Menghalang Rekod Anak Yatim?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn