TransWikia.com

Qual a diferença entre a exceção MySQL Trigger e MySQL Event?

Stack Overflow em Português Asked on October 22, 2020

Gostaria de criar um agendador de disparo de e-mail, se possível, sem uso do cron, e gostaria de saber se é possível fazer isso através do MySQL.

Pesquisando pela Internet eu vi alguns exemplos de criação de evento sem uso de cron:

CREATE EVENT PurgeLogTable
ON SCHEDULE EVERY 1 WEEK
DO
BEGIN
DELETE FROM `logs` WHERE `LogTime` <= DATE_SUB(CURRENT_TIMESTAMP,INTERVAL 1 WEEK);
INSERT INTO `audit` (`AuditDate`, `Message`) VALUES(NOW(), "Log table purged succesfully!");
END 

E um exemplo de disparo de e-mail usando trigger, só não sei se funciona, pois não testei:

CREATE TRIGGER send_emailverifier AFTER INSERT, UPDATE ON tbl_users 
FOR EACH ROW BEGIN 
SELECT * FROM email_bodies WHERE EmailID = 1; 
SELECT * FROM tbl_users WHERE ClientID = @ClientID 
INSERT INTO tbl_emailverify VALUES (UUID, tbl_users.ClientID, OLD.CltEmail, NEW.CltEmail) 
SELECT concat("To: ",NEW.CltEmail & "," & OLD.CltEmail), 
"From: [email protected]", 
concat("Subject: ",NEW.subject), 
"", 
email_bodies.EmailContent 
INTO OUTFILE "/inetpub/mailroot/pickup/mail.eml" 
FIELDS TERMINATED by 'rn'; 
END 

Mas minha dúvida é pertinente quanto à maneira de como poderia avisar um disparador de e-mail, para que acione o URL de envio, exemplo:

/enviar-emails/go

One Answer

Eles têm propósitos bem diferentes, como a sintaxe apresentada na pergunta já dá uma dica.

O TRIGGER é um recurso antigo dos banco de dados em geral para disparar - como o próprio nome diz - uma execução de algo quando algo ocorre em uma tabela. Uma mudança nos dados (INSERT, UPDATE, DELETE) provoca a ação secundária.

O EVENT é um recurso relativamente novo que é determinado pelo tempo, é um agendador. É uma forma de garantir que uma ação seja executada de tempos em tempos, independente do que ocorre no banco de dados. Ele é uma espécie de cron do banco de dados.

Então depende do objetivo para disparar o e-mail. Toda vez que um e-mail é inserido ou atualizado na tabela, precisa dispará-lo? Use o TRIGGER, como mostra o código acima. Se o envio - mesmo que seletivamente - deve ser feito de tempos em tempos, independente do que ocorre no banco de dados, use o EVENT.

A ação que ambos executam podem ser basicamente a mesma. Claro que há algumas limitações no EVENT porque ele não está manipulando dados. Por exemplo, ele não tem uma versão velha ou nova do dado que pode ser usado no TRIGGER, mas é uma limitação que não atrapalha porque nem faria sentido ter isto em algo que não está atualizando os dados.

Correct answer by Maniero on October 22, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP