El activador que muestra arriba está bien.
editar: Cuando crea un disparador en la GUI de phpMyAdmin, solo necesita ingresar el cuerpo del disparador en la Definición panel, en otras palabras, la parte BEGIN...END
.
Esto se debe a que phpMyAdmin intentará ser inteligente y escribirá el encabezado de activación por usted en función de los otros elementos que ingrese (nombre, tabla, hora, evento).
Esta es la forma correcta de definir un disparador en phpMyAdmin:
Si escribe el CREATE TRIGGER...
encabezado dentro del cuerpo, confundirá a MySQL porque verá CREATE TRIGGER... CREATE TRIGGER... BEGIN...END
. Esto hace que MySQL piense que está definiendo un disparador cuya primera declaración es CREATE TRIGGER
.
Como un tema secundario de su pregunta original, sugeriría algunos cambios en el cuerpo del disparador:
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
Los cambios:
- Referencia
NEW.ID
en lugar deDelivery.ID
. - Utilice SQL-92
JOIN
sintaxis en lugar de SQL-89 "estilo de coma" se une. - Usar
UPDATE
de varias tablas con uniones, en lugar deEXISTS
con subconsulta correlacionada. - Utilice comillas simples para cadenas en lugar de comillas dobles.
- Termina la
UPDATE
declaración con un punto y coma.