Rumah > pangkalan data > tutorial mysql > Bagaimanakah ON DELETE CASCADE Mempengaruhi Jadual Berkaitan dalam Kekangan Utama Asing MySQL?

Bagaimanakah ON DELETE CASCADE Mempengaruhi Jadual Berkaitan dalam Kekangan Utama Asing MySQL?

Susan Sarandon
Lepaskan: 2024-12-15 05:43:08
asal
541 orang telah melayarinya

How Does ON DELETE CASCADE Affect Related Tables in MySQL Foreign Key Constraints?

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;
Salin selepas log masuk

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           |
+------------+-------------+
Salin selepas log masuk

Jika anda memadamkan 'merah' kategori:

DELETE FROM categories WHERE (id = 1);
Salin selepas log masuk

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           |
+------------+-------------+
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan