O gatilho que você mostra acima está bom.
editar: Quando você cria um gatilho na GUI do phpMyAdmin, você só precisa inserir o corpo do gatilho na Definição painel, ou seja, a parte
BEGIN...END
. Isso ocorre porque o phpMyAdmin tentará ser inteligente e escrever o cabeçalho do gatilho para você com base nos outros elementos que você inserir (nome, tabela, hora, evento).
Aqui está a maneira correta de definir um gatilho no phpMyAdmin:
Se você escrever o
CREATE TRIGGER...
cabeçalho dentro do corpo, ele confundirá o MySQL porque verá CREATE TRIGGER... CREATE TRIGGER... BEGIN...END
. Isso faz o MySQL pensar que você está definindo um gatilho cuja primeira instrução é CREATE TRIGGER
. Como um problema secundário da sua pergunta original, sugiro algumas alterações no corpo do gatilho:
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
As mudanças:
- Referência
NEW.ID
em vez deDelivery.ID
. - Usar SQL-92
JOIN
sintaxe em vez de junções de "estilo de vírgula" SQL-89. - Usar
UPDATE
de várias tabelas com junções, em vez deEXISTS
com subconsulta correlacionada. - Use aspas simples para strings em vez de aspas duplas.
- Encerrar a
UPDATE
instrução com ponto e vírgula.