É posÂsiÂvel defiÂnir TRIGGERS para serem disÂpaÂraÂdos antes (BEFORE) ou depois (AFTER)
de um evento DML(Data ManiÂpuÂlaÂtion LanÂguage) INSERT, UPDATE, DELETE ou REPLACE.
Para pegar os valoÂres dos camÂpos nas TrigÂgers usaÂmos OLD.nome_do_campo e NEW.nome_do_campo.
Quando excluiÂmos o regisÂtro pegaÂmos o valor usando OLD.nome_do_campo e quando vamos adiÂciÂoÂnar
um regisÂtro usaÂmos NEW.nome_do_campo.
Abaixo regra do uso de OLD e NEW:
Delete usaÂmos somente OLD.nome_do_campo.
Insert somente NEW.nome_do_campo
UPDATE podeÂmos usar OLD.nome_do_campo e NEW.nome_do_campo.
Vou criar duas tabeÂlas para migrar os dados de uma tabela para outro usando TRIGGERS.
GO CREATE TABLE IF NOT EXISTS tb_comentario ( pk_comentario   int(11) AUTO_INCREMENT NOT NULL, tx_comentario   text NULL, PRIMARY KEY(pk_comentario) ) GO CREATE TABLE IF NOT EXISTS tb_comentario_historico ( pk_comentario_historico   int(11) AUTO_INCREMENT NOT NULL, fk_comentario            int(11) NOT NULL, tx_comentario            text NULL, PRIMARY KEY(pk_comentario_historico)
Vamos criar a priÂmeira TrigÂger para disÂpaÂrar apos fazer o Insert na tabela tb_comentario.
go DROP TRIGGER IF EXISTS trigger_insert_comentario_historico go CREATE TRIGGERÂ trigger_insert_comentario_historico AFTER INSERT ON tb_comentario FOR EACH ROW BEGIN INSERT INTO tb_comentario_historico SET fk_comentario = NEW.pk_comentario, tx_comentario = NEW.tx_comentario; END go insert into tb_comentario set tx_comentario = 'insert trigger' go select * from tb_comentario go select * from tb_comentario_historico
Agora vamos criar uma TrigÂger para deleÂtar o regisÂtro da tb_comentario_historio caso seja deleÂtado o regisÂtro na tb_comentario.
go DROP TRIGGER IF EXISTS trigger_delete_comentario_historico go CREATE TRIGGER trigger_delete_comentario_historico BEFORE DELETE ON tb_comentario FOR EACH ROW BEGIN DELETE FROM tb_comentario_historico WHERE fk_comentario = OLD.pk_comentario; END go delete from tb_comentario where pk_comentario = 21 go select * from tb_comentario go select * from tb_comentario_historico
A ultima TrigÂger será para fazer o Update na tb_comentario_historio caso seja feita alguma mudança na tb_comentario.
go DROP TRIGGER IF EXISTS trigger_update_comentario_historico go CREATE TRIGGER trigger_update_comentario_historico BEFORE UPDATE ON tb_comentario FOR EACH ROW BEGIN UPDATE tb_comentario_historico SET tx_comentario = NEW.tx_comentario WHERE fk_comentario = NEW.pk_comentario; END go update tb_comentario set tx_comentario = 'teste trigger update 2' where pk_comentario= 22 go select * from tb_comentario go select * from tb_comentario_historico
Caso tenha alguma duvida deixe um comenÂtáÂrio que terei praÂzer em ajuÂdar.
ComenÂtáÂrios são bem vinÂdos assim posso melhoÂrar a quaÂliÂdade dos tutoÂriÂais aqui apresentados.