Kapitel 8: MySQL-Tab ellentypen 503
Menge an Festplatten-Ein- und -Ausgaben. Beim Rollback wird kein solcher Mechanismus
benutzt, weshalb das Rollback bis zu 30 mal l¨anger als das Einf¨ugen dauern kann.
Falls Sie keine wertvollen Daten in Ihren InnoDB-Dateien haben, ist es im Fall eines ’fest-
gefahrenen’ Rollback besser, den Datenbank-Prozess zu killen und alle InnoDB-Daten- und
Log-Dateien sowie alle InnoDB-Tabellen (‘.frm’-Dateien) zu l¨oschen und noch einmal anzu-
fangen, statt darauf zu warten, dass Millionen von Festplatten-Ein- und -Ausgaben beendet
werden.
8.5.4.2 Fremdschl¨ussel-(Foreign Key)-Beschr¨ankungen
InnoDB-Version 3.23.44 hat Fremdschl¨ussel-(Foreign Key)-Beschr¨ankungen. InnoDB ist der
erste MySQL-Tabellentyp, der die Definition von Fremdschl ¨ussel-Beschr¨ankungen zul¨aßt,
um die Integrit¨at Ihrer Daten zu ¨uberwachen.
Die Syntax einer Fremdschl¨usseldefinition in InnoDB:
FOREIGN KEY (index_spalten_name, ...) REFERENCES tabellen_name (index_spalten_name, ...)
Beispiel:
CREATE TABLE eltern(id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB;
CREATE TABLE kind(id INT, eltern_id INT, INDEX par_ind (eltern_id),
FOREIGN KEY (eltern_id) REFERENCES eltern(id)) TYPE=INNODB;
Beide Tabellen m¨ussen vom Typ InnoDB sein und es muss einen Index geben, bei dem der
Fremdschl¨ussel und der referenzierte Schl¨ussel als erste Spalten aufgef¨uhrt sind. Jegliches
ALTER TABLE entfernt momentan alle Fremdschl¨usselbeschr¨ankungen, die f¨ur die Tabelle
definiert wurden, aber nicht die Beschr¨ankungen, die die Tabelle referenzieren. Korre-
spondierende Spalten im Fremdschl ¨ussel und dem referenzierten Schl¨ussel m¨ussen ¨ahnliche
interne Datentypen innerhalb InnoDB sein, so dass sie ohne Typumwandlung verglichen
werden k¨onnen. Die L¨angen von Zeichenkettentypen m¨ussen nicht dieselben sein. Die
Gr¨oße und Vorzeichen / kein Vorzeichen von Ganzzahltypen m¨ussen dieselben sein.
Beim Pr¨ufen von Fremdschl¨usseln setzt InnoDB gemeinsame Sperren auf Zeilenebene auf
kind- und eltern-Datens¨atze, die es betrachten muss. InnoDB pr¨uft Fremdschl¨ussel-(Foreign
Key)-Beschr¨ankungen sofort: Die Pr¨ufung wird nicht bis zu einem Transaktions-Commit
verschoben.
InnoDB l¨aßt zu, dass jegliche Tabelle gel¨oscht wird, selbst wenn das die Fremdschl¨ussel-
(Foreign Key)-Beschr¨ankungen durchbrechen w¨urde, die die Tabelle referenzieren. Wenn
Sie eine Tabelle l¨oschen, werden die Beschr¨ankungen, die in ihrem CREATE-Statement
definiert wurden, ebenfalls gel¨oscht.
Wenn Sie eine gel¨oschte Tabelle neu erzeugen, muss sie eine Definition haben, die mit den
Fremdschl¨ussel-(Foreign Key)-Beschr¨ankungen konform ist, die sie referenzieren. Sie muss
die richten Spaltennamen und -typen haben, und sie muss - wie oben angegeben - Indexe
auf die referenzierten Schl¨ussel haben.
Sie k¨onnen die Fremdschl¨ussel-(Foreign Key)-Beschr¨ankungen f¨ur eine Tabelle wie folgt
auflisten: T with
SHOW TABLE STATUS FROM ihr_datenbank_name LIKE ’T’;
Die Fremdschl¨ussel-(Foreign Key)-Beschr¨ankungen werden im Tabellen-Kommentar der
Ausgabe aufgelistet.
Comentarios a estos manuales