MySQL-HM-Referentielle_Integrität Flashcards
Referentielle Integrität
- prüft nach “Anlegen”, “Ändern” und “Löschen” ob Datensätze weiterhin in konsitstentem Zustand sind
- bei Inkonsistenz wird Transaktion standardmäßig nicht durchgeführt
Beispiele:
- Auftrag von einem Kunden der nicht existiert
- löschen eines Kunden, der schon Aufträge erteilt hat
- Änderung der Kundennummer eines Kunden, der schon Auträge erteilt hat
technische Vorraussetzung
- Tabellentyp: InnoDB
- übergeordnete Tabelle (Parenttabelle) muss Primary Key besitzen
- Verknüpfungsfeldern müssen genau gleich definiert sein (Ausnahmen: auto_increment, primary key)
- Verknüpfungsfeld der untergeordneten Tabelle (Childtabelle) muss eine Referenz auf den eindeutigen Index der Parenttabelle haben
Beziehung herstellen
Parenttabelle:
create table parent (
primärschlüssel datentyp primary key)
engine = innodb;
Childtabelle:
create table child (…
fremdschlüssel datentyp,
foreign key (fremdschlüssel)
references parent(primärschlüssel))
engine = innodb;
Foreign Key nachträglich hinzufügen
alter table tabellenname
add foreign key (feldname)
references parenttabelle(primärschlüssel);
Löschen / Ändern
on delete
- Möglichkeit anzugeben, was beim Löschen von Datensätzen der Parenttabelle mit den Datensätzen der Childtabelle passieren soll
on update
- Möglichkeit anzugeben, was beim Ändern Datensätzen der Parenttabelle mit den Datensätzen der Childtabelle passieren soll
on delete restrict
- Datensatz in der Parenttabelle darf nicht gelöscht werden
foreign key (fremdschlüssel) references parenttabelle(primärschlüssel)
on delete restrict
on delete cascade
- die Datensätze der Childtabelle werden mitgelöscht
foreign key (fremdschlüssel) references parenttabelle(primärschlüssel)
on delete cascade
on delete set null
- das Fremdschlüssel-Feld in den Datensätzen der Childtabelle wird auf NULL gesetzt
foreign key (fremdschlüssel) references parenttabelle(primärschlüssel)
on delete set null
on update restrict
- Datensatz in der Parenttabelle darf nicht geändert werden
foreign key (fremdschlüssel) references parenttabelle(primärschlüssel)
on update restrict
on update cascade
- die Datensätze der Childtabelle werden mit geändert
foreign key (fremdschlüssel) references parenttabelle(primärschlüssel)
on update cascade
on update set null
- das Fremdschlüssel-Feld in den Datensätzen der Childtabelle wird auf NULL gesetzt
foreign key (fremdschlüssel) references parenttabelle(primärschlüssel)
on update set null
Definition beider Befehle
- es können auch beide Befehle zusammen verwendet werden
foreign key (fremdschlüssel) references parenttabelle(primärschlüssel)
on update option on delete option