# mysql: constraints: on update restrict on delete cascade



## basmati123 (18. Juni 2008)

Hallo,

ich habe eine Frage zu den constraints:

Wenn ich zwei Tabellen entwerfe und in einer einen Fremdschlüssel habe mit Referenz auf den den Primärschlüssel der ersten Tabelle und diesen folgendermaßen beschreibe; 

CONSTRAINT FOREIGN KEY ( 1 ) REFERENCES b( 1) ON UPDATE CASCADE ON DELETE CASCADE 

und im Unterschied dazu dann mal so:

CONSTRAINT FOREIGN KEY ( 1 ) REFERENCES b( 1) ON UPDATE RESTRICT ON DELETE RESTRICT

wo genau liegt dann in der Praxis der Unterschied

Ich meine, normalerweise würde ich machen:
on update restrict (nichts neues in Kindtabelle einfügbar, ohne dass in der Elterntabelle nicht ein Eintrag für den Primärschlüssel erfolgt ist, der als Fremdschlüssel gebraucht wird)

on delete cascade (wenn in Elterntabelle etwas gelöscht wird, wird in der Kindtabelle der entsprechende Eintrag mitgelöscht - oder habe ich das falsch verstanden? In der Kindtabelle kann ich ja eh löschen, wie ich will, oder nicht? ist das bei on delete restrict anders? nein oder?)

wenn ich nun sage:
on update cascade - was hat das dann für Folgen? dann müsste ja in die Kindtabelle etwas einfügbar sein, ohne dass in der Elterntabelle ein Eintrag erfolgt, oder was?
( und was ist bei on delete restrict?)

Ich habe es mal ausprobiert (also einmal beides cascade und einmal beides restrict) und seltsamerweise hat es immer die gleiche Wirkung gehabt: Ich konnte nichts einfügen, ohne das bei der Elterntabelle ein gleicher Eintrag war und wenn ich in der Elterntabelle den Eintrag lösche, wird er in der Kindtabelle mitgelöscht - vielleicht habe ich etwas übersehen?

Kann mir jemand sagen, was ich falsch verstanden habe und wo der eigentlich Unterschied bei beiden sachen liegt?
restrict ist verbietend und cascade greift auf alle Tabellen über, so habe ich das zumindestens verstanden, aber ich merke gerade beim ausprobieren keinen Unterschied.

Vielen Dank!


----------

