Heim >Datenbank >MySQL-Tutorial >Wie wirkt sich ON DELETE CASCADE auf verwandte Tabellen in MySQL-Fremdschlüsseleinschränkungen aus?
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!