Foreign Key anlegen klappt nicht

Irgendwelche Probleme mit XAMPP für Windows? Dann ist hier genau der richtige Ort um nachzufragen.

Foreign Key anlegen klappt nicht

Postby Lilli » 23. April 2008 15:47

Hallo,

ich habe eine Tabelle (Urlaub), in der ich einen Foreign Key anlegen wollte. Das klappt nicht und ich erhalte die Fehlermeldung "Can't create table...". Die Tabelle enthält keinen Primary Key und keinen Index. Das referenzierte Feld (Dienstplan) ist der Primary Key.

Ich habe das so versucht:
Code: Select all
ALTER TABLE `Urlaub` ADD FOREIGN KEY (Mitarbeiter_ID) REFERENCES `Dienstplan` (Mitarbeiter_ID);

Hat jemand eine Idee, wo mein Fehler liegen kann? Ich komme einfach nicht weiter und bin schon total am verzweifeln :cry:.

Ich nutze XAMPP for Windows 1.4.11 und MySQL 5...

Ciao Lilli
Ciao und vielen Dank
Lilli
 
Posts: 4
Joined: 23. April 2008 15:31

Postby Nobbie » 23. April 2008 23:04

Foreign Keys werden nur mit InnoDB unter MySQL unterstützt. Standardmäßig ist aber MyISAM bei MySQL eingestellt.
Nobbie
 
Posts: 8770
Joined: 09. March 2008 13:04

Postby Lilli » 24. April 2008 09:48

Hallo,

ja ja, das weiß ich. Die Tabelle, in der ich Foreign Keys erstellen möchte, ist eine InnoDB. Die referenzierte Tabelle allerdings eine MyISAM. Könnte da das Problem liegen?
Ciao und vielen Dank
Lilli
 
Posts: 4
Joined: 23. April 2008 15:31

Postby Nobbie » 24. April 2008 09:51

Wie bitte? Du hast einen Mix installiert? Ich denke nicht, dass das geht. Lege doch alle Datenbanken in InnoDB, dann bist Du auf der sicheren Seite.
Nobbie
 
Posts: 8770
Joined: 09. March 2008 13:04

Postby Lilli » 24. April 2008 10:14

Hallo,

also ich habe jetzt noch einmal recherchiert. Es wird behauptet, dass alle Tabellenarten in einer Datenbank verwaltet und miteinander verknüpft werden können. Ich brauche MyISAM wegen der Unterstützung der Volltextsuche. Oder kann das inzwischen auch InnoDB?
Ciao und vielen Dank
Lilli
 
Posts: 4
Joined: 23. April 2008 15:31

Postby Wiedmann » 24. April 2008 10:53

Es wird behauptet

Wer ist es?

dass alle Tabellenarten in einer Datenbank verwaltet

Yup.

und miteinander verknüpft werden können.

Nein (, oder schlechte Übersetzung). Du kannst aber in einem Statement auf beide Tabellentypen gleichzeitig zugreifen, z.B. bei einem JOIN.

Bei FOREIGN KEYS (~ "Verknüpfungen") mussen alle beteiligten Tabellen vom Type InnoDB sein.

Volltextsuche. Oder kann das inzwischen auch InnoDB?

Nein.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Nobbie » 24. April 2008 14:01

Wenn Du Volltextsuche brauchst, kommt natürlich InnoDB als DBMS nicht in Frage. Andererseits frage ich mich, wozu Du FOREIGN KEY benötigst?

Man kann Fremdschlüssel auch einfach und sauber in SQL und PHP programmieren, ohne auf Funktionalität zu verzichten, was nicht nur ich für die sauberere Programmierung halte, allein schon aus dem Grund, weil sie portabler ist.

Sprich: benötigt die Anwendung wirklich die FOREIGN KEYs von InnoDB oder ist es nur Bequemlichkeit?
Nobbie
 
Posts: 8770
Joined: 09. March 2008 13:04

Postby Lilli » 24. April 2008 14:24

Hallo,

hast Du einen Tipp für mich, wie ich Foreign Keys in SQL programmiere? Ein Link oder so etwas? Ich habe davon nämlich keine Ahnung, aber mein Versuch (siehe oben ALTER TABLE ... ADD FOREIGN KEY) scheint es ja nicht zu sein.
Ciao und vielen Dank
Lilli
 
Posts: 4
Joined: 23. April 2008 15:31

Postby Nobbie » 24. April 2008 14:46

Ein Foreign Key ist doch überhaupt nichts besonderes - das ist das allererste und kleinste einmal eins in SQL. Das ist nichts anderes als eine Spalte in einer Tabelle, die als Wert den Primary Key einer anderen Tabelle hat.

Nur stellt manches DBMs ein paar zusätzliche Funktionen zur Verfügung (wie beispielsweise referenzielle Integrität), die den Programmierer davor bewahren, die (in diesem Beispiel) Integrität der Daten (sprich: gibt es zum gespeicherten Fremschlüssel auch wirklich noch den Tabelleneintrag) sauber auszuprogrammieren. Aber bei vielen SQL-Systemen steht dieser Luxus nicht zur Verfügung (bei MyISAM beispielsweise nicht) - weswegen das Programm sich um die Datenintegrität kümmern muss.

Das ist nur EIN Beispiel - letztendlich weiß ich nicht, welche Vorteile oder Vereinfachungen InnoDB mit dem FOREIGN KEY anbietet, aber wer solche Dinge nutzt, macht sich abhängig von diesen Systemen (genau das, was Dir jetzt passiert ist). Und dabei hat SQL eigentlich einmal die Idee gehabt, portabel über verschiedene Systeme zu sein.

Ich kenne ja Dein Script nicht, aber Du mußt doch wissen, welche Funktionen Du dort benötigst und wie man sie ggf. anders programmieren kann. Aus dem Nichts heraus kann ich da nicht weiterhelfen.
Nobbie
 
Posts: 8770
Joined: 09. March 2008 13:04


Return to XAMPP für Windows

Who is online

Users browsing this forum: No registered users and 16 guests