Ich habe hier eine MySQL Datenbank. In dieser Datenbank liegen meine Kunden- und Auftragsdaten. Aktuell mache ich das erstellen des Versand- und Rechnungsdatums noch händisch, was aber ziemlich nervig ist. Da ich sowieso den Versand mit nur einem Klick bestätige, würde ich gerne das aktuelle Datum direkt mit in die DB schreiben sobald der boolesche Wert von "verschickt" auf wahr geht. Da kam mir die Idee mit einer Prozedur in der Datenbank gerade recht. Ist es damit möglich ein Trigger genau in diesem Fall zu setzen und das Datum automatisch eintragen zu lassen? Also: Datensatz aktualisiert -> wenn "verschickt" von false auf true wechselt -> aktuelles Datum in "VersandDatum" eintragen? Vielen lieben Dank für eure Hilfe :-D
Da reicht ein Trigger...
1 | db> delimiter // |
2 | db> CREATE TRIGGER trgSetVersanddatum BEFORE UPDATE ON bestellungen |
3 | FOR EACH ROW |
4 | BEGIN |
5 | IF NEW.shipped = 1 THEN |
6 | SET NEW.VersandDatum = now(); |
7 | END IF; |
8 | END;// |
9 | db> delimiter ; |
Warum wird vorher das Trennzeichen geändert? Braucht man das wenn man auf der Konsole in mysql eingeloggt ist und mehrzeilige Anweisungen eintippt oder braucht man das generell bei stproc oder triggern?
Vielen Dank das war genau das was ich brauchte :-D vom Autopoliturverkäufer @ Kirmes zum Rekrutah schrieb im Beitrag #6801887: > Warum wird vorher das Trennzeichen geändert? > Braucht man das wenn man auf der Konsole in mysql eingeloggt ist und > mehrzeilige Anweisungen eintippt oder braucht man das generell bei > stproc oder triggern? Weil der Trigger aus mehreren Statements besteht, die müssen gebunden werden. So das die normalen Statement-Begrenzer nicht mehr gelten. Welchen Begrenzer man da wählt ist relativ unerheblich, darf halt nur nicht im Statement selbst vorkommen.
Draco schrieb: > Aktuell mache ich das erstellen des Versand- und Rechnungsdatums noch > händisch, was aber ziemlich nervig ist. Da ich sowieso den Versand mit > nur einem Klick bestätige, würde ich gerne das aktuelle Datum direkt mit > in die DB schreiben sobald der boolesche Wert von "verschickt" auf wahr > geht. Kann man so machen, klingt aber nach Käse. Bestimmt gibt es (mindestens) zwei Felder, einmal das Versand-Flag, und dann noch ein Versand-Datum, dass vorher NULL ist. Solche Konstrukte ebnen den Weg zur Hölle, das fliegt irgendwann in die Luft. Einfach eine zweite Tabelle, zwei Spalten. Die erste Spalte Foreign-Key auf die Bestellung, die zweite Spalte Versanddatum mit Default-Wert aktuelles Datum. Dann anstatt ein Bool-Flag zu setzen für den Versand, einfach ein Insert in die Versand-Tabelle mit dem Key der Bestellung. Da aktuelle Datum kommt dann automatisch rein. Keine NULLs, keine Trigger, ordentliches Datenmodell, etc. Summa summarum: Keine grauen Haare.
Einer schrieb: > Solche Konstrukte ebnen den Weg zur Hölle, das fliegt irgendwann in die > Luft. Warum?
Einer schrieb: > Keine NULLs, keine Trigger, ordentliches Datenmodell, etc. Wozu eine zweite Tabelle was jetzt schon als Spalte passt? Wenn du geschrieben hättest die BOOL-Spalte weg ok.
Jan H. schrieb: > Wozu eine zweite Tabelle was jetzt schon als Spalte passt? Wenn du > geschrieben hättest die BOOL-Spalte weg ok. Natürlich BOOL-Spalte weg. Logisch.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.