[MySQL] Trigger mit IF bringen mich zur Verzweiflung
Seigo
- datenbank
Tag zusammen,
ich versuche gerade, mit Triggern zu arbeiten.
Folgende Aufgabe:
Ich habe eine Tabelle, die Artikel und deren Preise enthält.
Bei JEDER Änderung soll last\_update
= NOW() gesetzt werden.
Bei einer Änderung von Preisen soll zusätzlich die Spalte preisdatum
auf NOW() gesetzt werden.
Hier meine Tabelle (vereinfacht):
CREATE TABLE IF NOT EXISTS articles
(
id
INT NOT NULL AUTO_INCREMENT ,
insert\_date
TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
last\_update
DATETIME NOT NULL ,
preisdatum
DATETIME NOT NULL COMMENT 'Datum der letzten Preisänderung' ,
einkaufspreis
DOUBLE NOT NULL COMMENT 'Netto' ,
verkaufspreis\_1
DOUBLE NOT NULL COMMENT 'Netto' ,
PRIMARY KEY (id
)
)
ENGINE = MyISAM;
Mit folgendem Trigger habe ich mein Glück versucht, leider erfolglos:
DELIMITER $$
CREATE TRIGGER upd\_preisdatum
BEFORE UPDATE ON articles
FOR EACH ROW
BEGIN
IF @einkaufspreis != NEW.einkaufspreis THEN
SET NEW.preisdatum = NOW();
END IF;
END;
$$
DELIMITER ;
Irgendwie scheint MySQL schon die erste Zeile nicht zu mögen:
#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 'DELIMITER $$
CREATE TRIGGER upd\_preisdatum
BEFORE UPDATE ON articles
FOR E' at line 1
Wer kann mir weiterhelfen und die Grundlagen von Triggern ein wenig näher erläutern?
echo $begrüßung;
#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 'DELIMITER $$
Die DELIMITER-Geschichte benötigst du nur, wenn du an der MySQL-Konsole arbeitest.
echo "$verabschiedung $name";
Ok, danke schonmal.
Diese Meldung wäre schon mal weg ;-)
Allerdings mag es dennoch nicht so recht:
CREATE TRIGGER upd\_preisdatum
BEFORE UPDATE ON articles
FOR EACH ROW
IF @einkaufspreis != NEW.einkaufspreis THEN
SET NEW.preisdatum = NOW();
END IF;
#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 'SET NEW.preisdatum = NOW()' at line 4
Ich habe das Gefühl, dass ich irgendwas bei der If-Schleife falsch mache...
aber ich komm´ einfach nicht drauf.
echo $begrüßung;
#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 'SET NEW.preisdatum = NOW()' at line 4
Kann ich nicht direkt nachvollziehen. Geht bei mir problemlos.
Ich habe das Gefühl, dass ich irgendwas bei der If-Schleife falsch mache...
if ist keine Schleife. Wie/womit setzt du denn das Statement ab?
echo "$verabschiedung $name";
Kann ich nicht direkt nachvollziehen. Geht bei mir problemlos.
Garrr, warum funktioniert das bei dir? ;-)
if ist keine Schleife.
Jo, falsch ausgedrückt...
Wie/womit setzt du denn das Statement ab?
Versteh gerade nicht, wie du das meinst...
Ich geb das im PhpMyAdmin direkt ein ;-)
Info: MySQL-Client-Version: 5.0.32
echo $begrüßung;
Wie/womit setzt du denn das Statement ab?
Ich setzte es (inklusive DELIMITER) über die MySQL-Konsole ab.
Ich geb das im PhpMyAdmin direkt ein ;-)
phpMyAdmin erkennt die ; als Statementbegrenzer und trennt einen Text an den Semikolons in einzelne Statements auf. Unter der SQL-Eingabebox befindet sich jedoch ein Feld namens Begrenzer mit einem Semikolon drin. Nimmt man dieses da raus, kann man auch solch ein Compound Statement einkippen und ausführen lassen, ohne dass es der PMA auseinandernimmt.
echo "$verabschiedung $name";
Prima, danke!
Jetzt mault mich PMA zwar noch an, dass mir die Berechtigung fehlt, aber das stellt nicht das Problem dar ;-)
Ein kurzer Anruf, schon bin ich "Super"...
Ich meld mich dann nochmal, obs geklappt hat :-)
*freu*