Mario Steinko: MySQL Foreign Key erzeugen

Hey, was is denn daran falsch, er will das delte irgendwie ned :-/

ALTER users\_comments
ADD FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;

Was muss ich denn da ändern?

lg
Mario

  1. Kann mir bitte jemand helfen, ich hab schon in die Hilfe geschaut und diverses ausprobiert, er findet aber imemr einen Fehler in der nähe von '... ON DEL', in der MySQL Doku stehts aber auch so ähnlich drinnen:
    http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

    ka warums ned geht

    1. Hi,

      Kann mir bitte jemand helfen, ich hab schon in die Hilfe geschaut und diverses ausprobiert, er findet aber imemr einen Fehler in der nähe von '... ON DEL', in der MySQL Doku stehts aber auch so ähnlich drinnen:
      http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

      Und du nutzt auch die Engine, für die das auf der genannten Seite geschriebene gilt?

      MfG ChrisB

      --
      Light travels faster than sound - that's why most people appear bright until you hear them speak.
  2. Hallo,

    ALTER users\_comments
    ADD FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;

    Was muss ich denn da ändern?

    Die gleiche Syntax funktioniert bei mir mit ALTER TABLE statt einfach nur ALTER. ALTER dagegen funktioniert nicht.

    Wenn das immer noch nichts hilft: Welche MySQL-Server-Version verwendest Du? Wenn die zu alt ist, funktionieren Foreign Keys da nicht oder nur bedingt.

    Viele Grüße,
    Christian

    1. danke, ich stare drauf is sehs einfach ned, loool

      Jetzt kann ich es ohne Probleme ausführen, funktionieren tuts aber trotzdem ned.
      Wenn ich einen users-Eintrag lösche bleiben die verknüpften users_comments bestehen :-/

      lg
      Mario

      1. Hallo,

        Jetzt kann ich es ohne Probleme ausführen, funktionieren tuts aber trotzdem ned.
        Wenn ich einen users-Eintrag lösche bleiben die verknüpften users_comments bestehen :-/

        Welche Storage-Engine verwendest Du? Wenn Deine Tabellen MyISAM als Storage-Engine verwenden, dann kann das nicht funktionieren (CREATE TABLE schlägt dann zwar nicht fehl, aber es wirkt sich halt nicht aus) - Du brauchst also InnoDB als Storage-Engine.

        Das Dumme ist nur: Man kann die nicht im laufenden Betrieb wechseln. Du musst die Tabellen komplett neu erstellen.

        (Wie man die Storage-Engine einstellt: Siehe das MySQL-Handbuch zu CREATE TABLE, dort den Abschnitt über "ENGINE".)

        Viele Grüße,
        Christian

        1. Hey!

          Da ich noch in der Entwicklung bin kann ich die Engine ohne weiteres ändern, mit Datenbanken kenn ich mich leider gar ned aus  - also ich hab den theoretischen Background wie sie arbeiten, die Security-Functions, Multiuser-Handling, etc, aber eben nur theoretisch :-/

          Deshalb hab ich die Standard Engine genommen (war MyISAM). Ich brauch als Kollation utf8_unicode_ci.

          Welche nachteile hat denn die InnoDB Engine gegenüber MyISAM? Gibts Gründe nicht zu wechseln und die FK-Bezieheung anders zu lösen?

          lg
          Mario

          1. Hallo,

            Welche nachteile hat denn die InnoDB Engine gegenüber MyISAM? Gibts Gründe nicht zu wechseln und die FK-Bezieheung anders zu lösen?

            Der einzige Nachteil, der mir einfällt, ist, dass bei InnoDB Volltextindizes nicht funktionieren - wenn Du also einen Volltextindex verwendest, wirst Du MyISAM nehmen müssen. Andererseits: Mit MyISAM funktionieren nicht nur Foreign Keys nicht - auch Transaktionen sind nicht möglich. Und *das* ist in meinen Augen ein Killerargument gegen MyISAM - und für InnoDB. Genauere Informationen dazu stehen aber auch wieder im Handbuch. Achja: Collations sind übrigens unabhängig von der Storage-Engine.

            Viele Grüße,
            Christian

            1. Cool, danke

              Hat es Nachteile die Engines zu vermischen? Können JION Abfragen zw. einer MyISAM und InnoDB Tabelle zu Problemen führen?

              lg
              Mario

              1. Hallo,

                Hat es Nachteile die Engines zu vermischen?

                Das kann bei Transaktionen übel ins Auge gehen - wenn Du z.B. zwei Tabellen innerhalb einer Transaktion änderst und dann ein ROLLBACK machst, dann wird's *richtig* lustig und Deine Datenbank wird inkonsistent.

                Ich verwende grunsätzlich nur InnoDB wenn ich MySQL verwende und bin damit bisher gut gefahren.

                Können JION Abfragen zw. einer MyISAM und InnoDB Tabelle zu Problemen führen?

                JOIN ist kein Problem, das Schreiben schon viel eher.

                Viele Grüße,
                Christian