Robert R.: MySQL > 5.1, Relationen und Foreign Key Contraints

Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,

ja!

ich kämpfe mich durch die Datenmodelle von verschiedenen Projekten und würde gerne mal vernünftige Kontrollen für Relationen, also z.B. mit Foreign Key Contraints, einbauen.

Kann man das mit MySQL inzwischen?

Ich finde nur Einsteiger-Tutorials ins Thema; da wird aber leider nichts über die referenzielle Integrität erzählt. Hier im Archiv habe ich auch nix gefunden. Hat sich hier schon mal jemand näher damit beschäftigt bei MySQL?

Ich hab die Sachen ausprobiert, die auf http://www.w3schools.com/sql/sql_foreignkey.asp beschrieben sind. Leider haut mir MySQL immer mit einer Fehlermeldung auf die Finger. Entweder, ich habe noch einen anderen Denkfehler drin, oder es funktioniert einfach noch nicht.

Zum Ausperobieren habe ich die MySQL-Version 5.5.34 aus dem XAMPP benutzt.

Spirituelle Grüße
Euer Robert

--
Möge der Forumsgeist wiederbelebt werden!
  1. Tach!

    ich kämpfe mich durch die Datenmodelle von verschiedenen Projekten und würde gerne mal vernünftige Kontrollen für Relationen, also z.B. mit Foreign Key Contraints, einbauen.
    Kann man das mit MySQL inzwischen?

    Schon lange, aber nur mit der InnoDB-Engine.

    Ich hab die Sachen ausprobiert, die auf http://www.w3schools.com/sql/sql_foreignkey.asp beschrieben sind. Leider haut mir MySQL immer mit einer Fehlermeldung auf die Finger.

    Da fehlt die Angabe der Engine im Statement. Man kann sicher eine Default-Engine irgendwo einstellen, wenn man das nicht als Klausel ins CREATE TABLE aufnimmt.

    dedlfix.

    1. Liebe Mitdenker,
      liebe Wissende,
      liebe Neugierige,

      ja!

      ich kämpfe mich durch die Datenmodelle von verschiedenen Projekten und würde gerne mal vernünftige Kontrollen für Relationen, also z.B. mit Foreign Key Contraints, einbauen.
      Kann man das mit MySQL inzwischen?

      Schon lange, aber nur mit der InnoDB-Engine.

      Shit, dann müsste ich ja alle Tabellen umbuffen und kann noch nicht abschätzen, was dann wieder nicht geht. Was kann denn die Inno-DB dann wieder nicht, was die MyISAM kann? Ich erinnere mich dran, dass es da Schwierigkeiten mit der Offtime-Vollsicherung gab. Bei uns wird täglich das komplette Datenbankverzeichnis einfach gesichert, während der Server kurz runtergefahren ist.

      Ich hab die Sachen ausprobiert, die auf http://www.w3schools.com/sql/sql_foreignkey.asp beschrieben sind. Leider haut mir MySQL immer mit einer Fehlermeldung auf die Finger.

      Da fehlt die Angabe der Engine im Statement. Man kann sicher eine Default-Engine irgendwo einstellen, wenn man das nicht als Klausel ins CREATE TABLE aufnimmt.

      Ja, schade. Bin ich auch nicht drauf gekommen. Hätte mir ein paar Stunden rumprokeln erspart.

      Spirituelle Grüße
      Euer Robert

      --
      Möge der Forumsgeist wiederbelebt werden!
      1. Moin Robert,

        Shit, dann müsste ich ja alle Tabellen umbuffen […]

        Wenn dir die Integrität der Daten wichtig ist, solltest du das eh tun. MyIsam ist nicht crash-safe, kann keine Transaktionen und Concurrency ist allgemein ein Problem, weil es auch kein row-level locking kann. Während man bei row-level locking noch sagen kann „brauch ich eh nicht, mir egal wenn alle Schreibzugriffe serialisiert werden müssen“ kann man bei Transaktionen und Crash-safety nur verzichten, wenn einem die Daten scheiss egal sind…

        […] und kann noch nicht abschätzen, was dann wieder nicht geht. Was kann denn die Inno-DB dann wieder nicht, was die MyISAM kann?

        Es ist eher umgekehrt, InnoDB kann eine Menge mehr als MyIsam.

        Ich erinnere mich dran, dass es da Schwierigkeiten mit der Offtime-Vollsicherung gab. Bei uns wird täglich das komplette Datenbankverzeichnis einfach gesichert, während der Server kurz runtergefahren ist.

        Nein, das geht. Es ist allerdings eine schlechte Idee, den DB-Server neu zu starten (zumindest ab einer bestimmten Grösse), da damit so einiges an Cashes verloren geht. Ich weiss natürlich nicht, wie gross euer Projekt ist, aber bei uns in der Firma ist die DB die ersten 10 Minuten nach einem restart echt lahmarschig. An Tagen mit weniger Traffic entsprechend länger.

        LG,
         CK

      2. Hi,

        Was kann denn die Inno-DB dann wieder nicht, was die MyISAM kann?

        Die Volltext-Suche war bis einschließlich 5.5 nur in MyISAM-Tabellen möglich (erst ab 5.6 auch bei InnoDB).

        MfG ChrisB

        --
        Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/