mysql Fremdschlüssel richtig einsetzen

südpol

Erfahrenes Mitglied
Hi,

habe gerade ein mysql Problem und die mysql Site scheint down zu sein :eek:

Vielleicht kann mir einer von euch helfen.

Ich habe einen Satz InnoDB Tabellen und will, dass Datensätze, deren Fremdschlüssel gelöscht werden auch gelöscht werden.

Sprich ich habe z. B. Tabelle 1 (primärschlüssel: s_id) Tabelle 2 hat als Fremdschlüssel s_id von Tabelle1) Wenn ich nun einen Datensatz in Tabelle 1 lösche möchte ich, dass alle Datensätze in Tabelle 2, die den Fremdschlüssel des zu löschenden Datensatzes haben, auch gelöscht werden.

Diese Funktion ist doch mehr oder weniger der Sinn von Fremdschlüsseln, oder :D

Ich habe nun über phpmyadmin (consolenfaul wie ich bin) das ganze eingestellt. Die Fremdschlüssel an sich stehen auch alle richtig drin und funktionieren. In der Beziehung der Tabelle habe ich bei Tab2 unter on Delete: Restrict ausgewählt.

Wenn ich nun aber eine löschabfrage gegen tabelle 1 laufen lasse darf ich das nicht, wegen den Fremdschlüsseln - was mache ich falsch?

Danke
 
Hallo Südpol (*bibber*),

Wenn du einen Eintrag aus einer Tabelle löschen willst, sollten - um die Integrität der DB zu gewährleisten - alle Datensätze, die auf diesen Datensatz verweisen ebenfalls behandelt werden - z.B. auch gelöscht.
Das scheinst du ja auch selbst schon erkannt zu haben. :)
Wenn du natürlich nicht das kaskadierende Löschen zulässt, sondern vielmehr das Löschen des Schlüsselwertes verbietest, wenn noch ein Wert aus Tabelle2 auf diesen verweist.
Also: was wunderst du dich, dass etwas nicht geht, was du selbst verbietest... :-)
 
Hi,

Ich habe doch Cascade ausgewählt daher müsste das löschen doch richtig funktionieren sprich ich lösche den schlüssel und er verwirft alle Datensätze, die an selbigem mit cascade hängen. Oder habe ich da gerade etwas falsch verstanden.

Ich habe beim fremdschlüssel in tab2 die auswahl zwischen ON DELETE:
CASCADE
SET NULL
NO ACTION
RESTRICT

Gruß Südpol *schwitz*
 
...und der Fehler sitzt wie immer vor dem Monitor...

man sollte bei ALLEN Tabellen die Fremdschlüssel richtig einstellen und nicht einfach eine der Tabellen vergessen... dann gehts gleich viel besser...

Gruß
 
Das Problem wird wohl sein, dass Du eine MySQL Version < 4,1 benutzt. Die 4.0x kennen zwar den Syntax - tun aber nich nicht, was sie sollen.

Chris
 
:p das war das erste was ich mir angeschaut habe :-)

Es lag aber tatsächlich "nur" an meiner Einstellung. Ich habe ganz simpel vergessen eine der Tabellen auf cascade umzustellenn...

aber danke für den Tipp!
 
Zurück