MySQL's ON DELETE CASCADE: Komponenten löschen und gleichzeitig Typdatensätze beibehalten
MySQL ON DELETE CASCADE
bietet das automatische Löschen abhängiger Datensätze, wenn ein verwandter Datensatz entfernt wird. Seine Anwendung erfordert jedoch eine sorgfältige Berücksichtigung der Tabellenbeziehungen.
Stellen Sie sich eine Datenbank zur Strukturierung von Komponenten vor, die jeweils mit einem bestimmten Typ verknüpft sind. Das Ziel: Alle mit einem Typ verknüpften Komponenten löschen, ohne den Typ selbst zu löschen. Ist das erreichbar?
Der Ansatz
Um dies zu erreichen, ist der strategische Einsatz von ON DELETE CASCADE
innerhalb einer klar definierten Tabellenstruktur erforderlich. Die Lösung lautet wie folgt:
<code class="language-sql">CREATE TABLE `components` ( `id` int(10) unsigned NOT NULL auto_increment, `typeId` int(10) unsigned NOT NULL, `moreInfo` VARCHAR(32), -- etc PRIMARY KEY (`id`), KEY `type` (`typeId`), CONSTRAINT `myForeignKey` FOREIGN KEY (`typeId`) REFERENCES `types` (`id`) ON DELETE CASCADE ON UPDATE CASCADE );</code>
Erstellung einer Komponententabelle: Diese Tabelle enthält Komponentendetails und ihre entsprechenden typeId
.
Fremdschlüsselimplementierung: Eine Fremdschlüsseleinschränkung (myForeignKey
) verbindet die components
-Spalte der typeId
-Tabelle mit der types
-Spalte der id
-Tabelle.
ON DELETE CASCADE Spezifikation: Das entscheidende Element: ON DELETE CASCADE
. Wenn ein Datensatz in der types
-Tabelle gelöscht wird (vorausgesetzt, beide Tabellen nutzen die InnoDB-Speicher-Engine), werden alle zugehörigen Datensätze in der components
-Tabelle, die diese typeId
gemeinsam nutzen, automatisch gelöscht.
Wichtige Überlegung:
InnoDB ist unerlässlich. Da MyISAM keine Fremdschlüsselunterstützung bietet, ist dieser Ansatz unwirksam.
Das obige ist der detaillierte Inhalt vonKann MySQLs ON DELETE CASCADE Komponentendatensätze automatisch löschen und gleichzeitig den Typdatensatz beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!