Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Trigger erstellen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Trigger erstellen

    Hallo,
    ich wollte mir gerade einen Trigger erstellen - hatte vorher damit noch nie was zu tun.
    Leider komme ich nur so weit:

    Code:
    CREATE TRIGGER update_names
    AFTER INSERT ON users
    FOR EACH ROW
    BEGIN
    INSERT INTO names (name) VALUES (user.name) WHERE users.id=NEW.id;
    END
    Wenn in die Tabelle users ein Eintrag erfolgt, soll der Name in die Tabelle names eingetragen werden.

    Mir wird immer der Fehler #1064 angezeigt und damit bin ich leider auch nicht weiter gekommen.
    Ich habe einfach ein Beispiel genommen und die Namen getauscht.

    Könnt mir ihr da bitte weiter helfen?

  • #2
    1064 ist soweit ich weiß ein Syntaxfehler.

    Kommentar


    • #3
      Ja, ist bekannt. Aber damit bin ich ja leider nicht weitergekommen. Was fehlt oder ist zuviel?

      Kommentar


      • #4
        http://dev.mysql.com/doc/refman/5.1/...e-trigger.html

        Kommentar


        • #5
          Ok, laut Referenzhandbuch wie folgt angepasst...

          Code:
          CREATE TRIGGER update_names AFTER INSERT ON users
            FOR EACH ROW BEGIN
              INSERT INTO names SET name = NEW.name;
           END;
          Nur leider wird immer noch der selbe Fehler produziert.
          Ich steh hier echt aufm Schlauch.

          Kommentar


          • #6
            Ich kenne mich mit Triggern auch nicht wirklich aus, aber bei Syntaxfehlern wird doch immer die Position des Fehlers angegeben, zusammen mit dem Handbuch sollte doch also eine Lösung möglich sein. Ich verstehe nicht, warum du die Fehlermeldung nicht postest.

            Kommentar


            • #7
              Ahso...
              Der Fehler lautet immer:
              #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
              Nur wo ist near ''?
              Und warum wird das dann so auf der Seite angegeben?

              Kommentar


              • #8
                Code:
                CREATE TRIGGER update_names AFTER  INSERT  ON users
                FOR EACH
                ROW 
                INSERT  INTO  NAMES ( name ) VALUES (NEW.name);
                (klappt bei mir, sowohl das Erstellen des Triggers als auch seine Funktionalität)

                Ich würde mir allerdings überlegen, ob es wirklich Sinn macht ein Duplikat anzulegen.

                Kommentar


                • #9
                  Problematisch wird das Semikolon sein, deshalb wird in den Beispielen auch ein anderer Delimiter gesetzt.
                  Code:
                  DELIMITER |
                  
                  CREATE TRIGGER testref BEFORE INSERT ON test1
                    FOR EACH ROW BEGIN
                      INSERT INTO test2 SET a2 = NEW.a1;
                      DELETE FROM test3 WHERE a3 = NEW.a1;  
                      UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
                    END;
                  |
                  DELIMITER ;

                  Kommentar


                  • #10
                    Der Hinweis mit dem Delimiter ist wohl der entscheidende. Habe das gleiche Thema mal mit Stored Procedures gehabt. Mit älteren PHP-MyAdmin Versionen (falls Du damit arbeitest) gibts Probleme. Ich glaube, das lag daran, dass man den zu beachtenden Delimiter nicht angeben kann.

                    Kommentar


                    • #11
                      Zitat von Chriz Beitrag anzeigen
                      Code:
                      CREATE TRIGGER update_names AFTER  INSERT  ON users
                      FOR EACH
                      ROW 
                      INSERT  INTO  NAMES ( name ) VALUES (NEW.name);
                      (klappt bei mir, sowohl das Erstellen des Triggers als auch seine Funktionalität)

                      Ich würde mir allerdings überlegen, ob es wirklich Sinn macht ein Duplikat anzulegen.
                      Der geht, danke!
                      Lag wohl an dem END?!

                      Kommentar


                      • #12
                        Zitat von greenslot Beitrag anzeigen
                        Der geht, danke!
                        Lag wohl an dem END?!
                        NEIN!
                        Es liegt wie bereits geschrieben am Delimiter.
                        Sobald mehrere Statements zusammengefasst werden und der Standard-Delimiter Semikolon vorkommt "denkt" MySQL, der Trigger wäre zu Ende.
                        Genau deswegen setzt man vor dem Trigger einfach einen anderen Delimiter und danach wieder das Semikolon.

                        Kommentar

                        Lädt...
                        X