# mysql Fremdschlüssel richtig einsetzen



## südpol (26. Mai 2004)

Hi,

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

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 

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


----------



## Gorcky (26. Mai 2004)

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...


----------



## südpol (27. Mai 2004)

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*


----------



## südpol (27. Mai 2004)

So, die mysql page ist wieder online...

Ich habe dort gerade diese Seite gefunden:

http://dev.mysql.com/doc/mysql/en/InnoDB_foreign_key_constraints.html

Die Aussagen dort bestätigen nach meinem dafürhalten meine Einstellungen oder siehtst du das andest?

Gruß


----------



## südpol (27. Mai 2004)

...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ß


----------



## XChris (27. Mai 2004)

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


----------



## südpol (27. Mai 2004)

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!


----------

