Der Trigger, den Sie oben zeigen, ist in Ordnung.
Bearbeiten: Wenn Sie einen Trigger in der GUI von phpMyAdmin erstellen, müssen Sie nur den Hauptteil des Triggers in die Definition eingeben Bereich, also der Teil BEGIN...END
.
Dies liegt daran, dass phpMyAdmin versuchen wird, clever zu sein und den Trigger-Header basierend auf den anderen von Ihnen eingegebenen Elementen (Name, Tabelle, Zeit, Ereignis) für Sie zu schreiben.
So definieren Sie einen Trigger in phpMyAdmin richtig:
Wenn Sie den CREATE TRIGGER...
schreiben Kopfzeile innerhalb des Körpers, wird es MySQL verwirren, weil es CREATE TRIGGER... CREATE TRIGGER... BEGIN...END
sehen wird . Dadurch denkt MySQL, dass Sie einen Trigger definieren, dessen erste Anweisung CREATE TRIGGER
ist .
Als Nebenproblem zu Ihrer ursprünglichen Frage würde ich einige Änderungen im Hauptteil des Triggers vorschlagen:
CREATE TRIGGER Update_Last_Transit_Status AFTER INSERT ON Delivery
FOR EACH ROW
BEGIN
UPDATE Transportation
INNER JOIN Transit ON Transit.Transportation_ID = Transportation.ID
INNER JOIN Route ON Transit.ID = Route.Transit_ID
SET Transportation.Status = 'Dispatched'
WHERE Route.Delivery_ID = NEW.ID
AND Transportation.Status = 'In Branch';
END
Die Änderungen:
- Referenz
NEW.ID
stattDelivery.ID
. - Verwenden Sie SQL-92
JOIN
Syntax anstelle von SQL-89-Joins im "Komma-Stil". - Verwenden Sie
UPDATE
für mehrere Tabellen mit Joins stattEXISTS
mit korrelierter Unterabfrage. - Verwenden Sie einfache Anführungszeichen für Zeichenfolgen anstelle von doppelten Anführungszeichen.
- Beenden Sie das
UPDATE
Anweisung mit einem Semikolon.