Heim >Datenbank >MySQL-Tutorial >Wie wirkt sich ON DELETE CASCADE auf verwandte Tabellen in MySQL-Fremdschlüsseleinschränkungen aus?

Wie wirkt sich ON DELETE CASCADE auf verwandte Tabellen in MySQL-Fremdschlüsseleinschränkungen aus?

Susan Sarandon
Susan SarandonOriginal
2024-12-15 05:43:08546Durchsuche

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

MySQL-Fremdschlüsseleinschränkungen mit Kaskadenlöschung

Fremdschlüsseleinschränkungen spielen eine entscheidende Rolle bei der Aufrechterhaltung der Datenintegrität und der Verhinderung von Waisen in relationalen Datenbanken. In MySQL können Sie die Option ON DELETE CASCADE verwenden, um sicherzustellen, dass beim Löschen eines übergeordneten Datensatzes auch zugehörige untergeordnete Datensätze automatisch gelöscht werden.

Um eine Fremdschlüsseleinschränkung mit Kaskadenlöschung einzurichten, beachten Sie Folgendes Tabellen:

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;

In diesem Setup haben Produkte einen Fremdschlüssel, der auf Kategorien verweist, und ON DELETE CASCADE ist angegeben, um Produkte automatisch zu löschen, wenn die referenzierte Kategorie gelöscht wird. Diese Kaskade wirkt sich jedoch nur auf Datensätze in „Kategorien_Produkte“ aus, bei denen die Kategorie-ID mit der gelöschten Kategorie übereinstimmt.

Zum Beispiel, wenn Sie über die folgenden Daten verfügen:

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           |
+------------+-------------+

Wenn Sie das „rote“ Kategorie:

DELETE FROM categories WHERE (id = 1);

Die Tabelle „products“ ist nicht betroffen, da die Kaskade nur für die Tabelle „categories_products“ gilt. Dadurch werden die Daten wie folgt:

categories:
+----+------+
| id | name |
+----+------+
| 2  | blue |
+----+------+

products:
+----+---------+------+
| id | name    | category_id |
+----+---------+------+
| 2  | boots   | 1           |
| 3  | gloves  | 2           |
+----+---------+------+

categories_products:
+------------+-------------+
| category_id | product_id |
+------------+-------------+
| 2          | 3           |
+------------+-------------+

Diese Vereinbarung stellt sicher, dass Sie die referenzielle Integrität wahren und gleichzeitig ein unbeabsichtigtes Löschen nicht zusammenhängender Datensätze vermeiden können.

Das obige ist der detaillierte Inhalt vonWie wirkt sich ON DELETE CASCADE auf verwandte Tabellen in MySQL-Fremdschlüsseleinschränkungen aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn