Sven: mysql Trigger triggert falsch?

Hallo,

meine Trigger:

CREATE TRIGGER kontrolle_insert AFTER INSERT ON table
 FOR EACH ROW BEGIN
    INSERT INTO kontrolle 
    SET 
    Art = 'INS',
    VorgangsID = NEW.VorgangsID, 
    PostenID = NEW.PostenID,
    Erstelldatum = now();
END


CREATE TRIGGER kontrolle_update AFTER UPDATE ON table
 FOR EACH ROW BEGIN
    INSERT INTO kontrolle 
    SET 
    Art = 'UP',
    VorgangsID = NEW.VorgangsID, 
    PostenID = NEW.PostenID,
    Erstelldatum = now();
END

CREATE TRIGGER kontrolle_delete BEFORE DELETE ON table
 FOR EACH ROW BEGIN
    INSERT INTO kontrolle 
    SET 
    Art = 'DEL',
    VorgangsID = OLD.VorgangsID, 
    PostenID = OLD.PostenID,
    Erstelldatum = now();
END

In die Tabelle wird beim Löschen eines Artikels aber nicht DEL, sondern UP eingetragen. Insert und Update werden korrekt eingetragen, nur beim Löschen wird ein UP eingetragen anstelle eines DEL.
Ist zwar für meine Anwendung nicht schlimm (weils nur rein informativ ist), aber interessieren tuts mich trotzdem.

Was läuft hier falsch?

Sven

akzeptierte Antworten

  1. Hallo Sven,

    Was läuft hier falsch?

    Höchstwahrscheinlich irgendwas in deinen Trigger-Definitionen. Schau nochmal genau nach. Einen MYSQL Bug (sofern Du überhaupt MySQL und kein Mariechen verwendest) würde ich hier bezweifeln.

    Ich habe das gerade mit MariaDB 10.5 nachgebaut und da wird sauber zwischen den Triggern unterschieden.

    Zuerst hatte ich auch einen AFTER UPDATE Trigger, den habe ich dann aber in einen BEFORE UPDATE Trigger geändert und mit einem IF überprüft, ob der UPDATE möglicherweise Schlüsselspalten ändern möchte. Wenn ja, breche ich den Update ab (wie hier gezeigt, letztes Beispiel mit SIGNAL).

    Rolf

    --
    sumpsi - posui - obstruxi
  2. Hm. Hast Du mal SHOW TRIGGERS versucht?

    Nicht dass Dir beim Klexperimentieren ein altes und falsches Exemplar in der DB hängen geblieben ist.

    1. Hm. Hast Du mal SHOW TRIGGERS versucht?

      Nicht dass Dir beim Klexperimentieren ein altes und falsches Exemplar in der DB hängen geblieben ist.

      Habe ich gemacht, das sieht sauber aus.
      Kann ich denn meinen Triggern nun vertrauen, wenn sie zweifelsohne einen fehler eintragen?
      Oder wie kann ich dem Fehler auf die Schliche kommen?

      Sven

      1. Kann ich denn meinen Triggern nun vertrauen, wenn sie zweifelsohne einen fehler eintragen?

        Laut Rolf B funktionieren die aber.

        Oder wie kann ich dem Fehler auf die Schliche kommen?

        Zwei Wege.

        a)

        Du kannst den ganzen Krempel (exportierte Datenbank, sonstige Logik - in welcher der Fehler auch liegen kann) gezippt zur Verfügung stellen.

        b)

        Hilfreich ist bei solchen Sackgassen, die Augen und Gedanken erst mal abzuwenden, sich anderen Dingen zu widmen und guter Hoffnung zu sein, dass man sich bei einem ausgeschlafenem Wiederbefassen nach mindestens 12 Stunden oder auf dem Klo oder in der Wanne liegend (die Orte, an denen man gute Einfälle hat sind sehr unterschiedlich) an den Kopf klatscht und sich selbst fragt, wie man denn bitteschön DAS übersehen konnte.

        Meistens Regelmäßig Stets hat man dann nämlich etwas total Triviales verbockt.

        1. Hallo,

          Hilfreich ist bei solchen Sackgassen, die Augen und Gedanken erst mal abzuwenden, sich anderen Dingen zu widmen und guter Hoffnung zu sein, dass man sich bei einem ausgeschlafenem Wiederbefassen nach mindestens 12 Stunden oder auf dem Klo oder in der Wanne liegend (die Orte, an denen man gute Einfälle hat sind sehr unterschiedlich) an den Kopf klatscht und sich selbst fragt, wie man denn bitteschön DAS übersehen konnte.

          bei mir hilft in solchen Fällen oft ein Spazierganz von 30..60 Minuten. Dabei kann ich mich zwar nicht vom eigentlichen Problem lösen, aber es kommen so viele Alternativ-Eindrücke auf mich zu, dass ich auch die Projekt-Sackgasse oft plötzlich in einem ganz anderen Licht sehe.

          Eine andere gute Idee: Jemanden um Rat fragen, der vom Thema recht wenig Ahnung hat. Dann ist man nämlich gezwungen, das Problem erstmal etwas weiter ausholend zu erklären, und dabei erkennt man oft schon den eigenen Denkfehler.

          Einen schönen Tag noch
           Martin

          --
          Möchtegern-Dichter zum Verleger: "Sie meinen also, ich sollte etwas mehr Feuer in meine Verse legen?" - "Umgekehrt, mein Lieber, umgekehrt. Mehr Verse ins Feuer."
          1. Dieser Beitrag wurde gelöscht: Der Beitrag ist unkonstruktiv oder provokativ und trägt zu einer Verschlechterung der Stimmung bei.
          2. bei mir hilft in solchen Fällen oft ein Spazierganz von 30..60 Minuten. Dabei kann ich mich zwar nicht vom eigentlichen Problem lösen, aber es kommen so viele Alternativ-Eindrücke auf mich zu, dass ich auch die Projekt-Sackgasse oft plötzlich in einem ganz anderen Licht sehe.

            👍👍👍
            Ich gehe strammen Schrittes jeden Tag zwischen 90 und 120 Minuten.
            Das ist sehr hilf- und erholreich.

            Eine andere gute Idee: Jemanden um Rat fragen, der vom Thema recht wenig Ahnung hat. Dann ist man nämlich gezwungen, das Problem erstmal etwas weiter ausholend zu erklären, und dabei erkennt man oft schon den eigenen Denkfehler.

            Schade, dass ich keine Zitate markieren kann.
            Vielleicht kann das jemand anders für mich machen, denn Du hast so was von Recht. Fast unwichtig, ob der andere mehr oder weniger Ahnung hat. Ich ahbe schon so oft die Lösung eines Problemes gefunden,. als ich hier eine Frage stellen wollte und das Problem deshalb sehr genau beschreiben musste.

            Sven

            1. Hallo Sven,

              bei mir hilft in solchen Fällen oft ein Spazierganz von 30..60 Minuten. Dabei kann ich mich zwar nicht vom eigentlichen Problem lösen, aber es kommen so viele Alternativ-Eindrücke auf mich zu, dass ich auch die Projekt-Sackgasse oft plötzlich in einem ganz anderen Licht sehe.

              👍👍👍
              Ich gehe strammen Schrittes jeden Tag zwischen 90 und 120 Minuten.
              Das ist sehr hilf- und erholreich.

              ja, das kann ich nachvollziehen. Ich gehe täglich zu Fuß zur Arbeit und wieder nach Hause (jeweils etwas mehr als 2km), sowie mittags zur Kantine eines Betriebs in der Nähe (hin und zurück etwa 1.5km). Macht also rund 6km Fußweg an einem ganz normalen Tag. Zwei- bis dreimal die Woche mache ich auf dem Heimweg noch einen kleinen Umweg, um Routineeinkäufe zu erledigen. Dann sind es noch etwa 2km mehr.

              Unterm Strich also 30..35km, die ich pro Woche zu Fuß zurücklege - manchmal auch 50km, wenn ich am Wochenende noch meine Eltern besuche. Und ich gehe auch recht flott: Ich kalkuliere normalerweise mit etwa 6..7km/h. Das ist ein Tempo, das ich erfahrungsgemäß auch ohne Probleme über eine Distanz von etwa 30km durchhalte, ohne dass es mich nennenswert anstrengt.

              Einen schönen Tag noch
               Martin

              --
              Möchtegern-Dichter zum Verleger: "Sie meinen also, ich sollte etwas mehr Feuer in meine Verse legen?" - "Umgekehrt, mein Lieber, umgekehrt. Mehr Verse ins Feuer."
          3. Die humorig-sarkastischen und nicht auf eine Person bezogenen Ausführungen von Tom zum Thema „Alkohol und Selbsteinschätzung“, die zudem mit der Erfahrung der wohl weit überwiegenden Zahl der Menschen übereinstimmen, waren zwar nicht „strikt konstruktiv“ aber doch kein Anlass zu irgendeinem Streit oder sonst wie „übergriffig“.

            Oder hab ich was verpasst?

            1. Hallo Raketenwilli,

              ich war's nicht…

              Da war wohl jemand trigger-happy. Sei froh, dass sie oder er nicht gleich das ganze Forum geschlossen hat 😉. Der Sportpfad im Thread müsste dann genauso gelöscht werden.

              Warum die Trigger eigenwillig funktionieren, wissen wir nur leider immer noch nicht.

              Rolf

              --
              sumpsi - posui - obstruxi
        2. Hilfreich ist bei solchen Sackgassen, die Augen und Gedanken erst mal abzuwenden, sich anderen Dingen zu widmen und guter Hoffnung zu sein, dass man sich bei einem ausgeschlafenem Wiederbefassen nach mindestens 12 Stunden oder auf dem Klo oder in der Wanne liegend (die Orte, an denen man gute Einfälle hat sind sehr unterschiedlich) an den Kopf klatscht und sich selbst fragt, wie man denn bitteschön DAS übersehen konnte.

          Meistens Regelmäßig Stets hat man dann nämlich etwas total Triviales verbockt.

          👍👍👍

  3. Hello,

    das Thema hatten wir neulich schon so ähnlich.

    Welche Datenbank und -Version benutzt Du? Bei den neueren Versionen kann man pro Tabelle und Klasse (Insert, Update, Delete) mehrere Trigger eintragen. Die werden dann mit einer etwas andern "add-syntax" hinzugefügt. Beschreibung

    Bei den älteren Versionen musste man die unterschiedlichen Wirkungsfälle immer in je einem Trigger zusammenfassen.

    Wenn man dann ein create Trigger ausgeführt hat und es bestand schon einer, dann gab es einen Fehler. Den muss man selbstverständlich auch abfragen und auswerten.

    Raketes Gedanke, sich erst einmal alle Trigger anzeigen zu lassen, ist daher nicht falsch. Aber bitte auch genau hinschauen, was drin steht.

    meine Trigger:

    CREATE TRIGGER kontrolle_insert AFTER INSERT ON table
     FOR EACH ROW BEGIN
        INSERT INTO kontrolle 
        SET 
        Art = 'INS',
        VorgangsID = NEW.VorgangsID, 
        PostenID = NEW.PostenID,
        Erstelldatum = now();
    END
    
    
    CREATE TRIGGER kontrolle_update AFTER UPDATE ON table
     FOR EACH ROW BEGIN
        INSERT INTO kontrolle 
        SET 
        Art = 'UP',
        VorgangsID = NEW.VorgangsID, 
        PostenID = NEW.PostenID,
        Erstelldatum = now();
    END
    
    CREATE TRIGGER kontrolle_delete BEFORE DELETE ON table
     FOR EACH ROW BEGIN
        INSERT INTO kontrolle 
        SET 
        Art = 'DEL',
        VorgangsID = OLD.VorgangsID, 
        PostenID = OLD.PostenID,
        Erstelldatum = now();
    END
    

    In die Tabelle wird beim Löschen eines Artikels aber nicht DEL, sondern UP eingetragen. Insert und Update werden korrekt eingetragen, nur beim Löschen wird ein UP eingetragen anstelle eines DEL.
    Ist zwar für meine Anwendung nicht schlimm (weils nur rein informativ ist), aber interessieren tuts mich trotzdem.

    Was läuft hier falsch?

    Sven

    Glück Auf
    Tom vom Berg

    --
    Es gibt soviel Sonne, nutzen wir sie.
    www.Solar-Harz.de
    S☼nnige Grüße aus dem Oberharz