mysql Trigger triggert falsch?
Sven
- mysql
1 Rolf B1 Raketenwilli0 Sven
0 TS- mysql
- version
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
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
Hm. Hast Du mal SHOW TRIGGERS versucht?
Nicht dass Dir beim Klexperimentieren ein altes und falsches Exemplar in der DB hängen geblieben ist.
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
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.
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
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
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
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?
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
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.
MeistensRegelmäßigStets hat man dann nämlich etwas total Triviales verbockt.
👍👍👍
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