É possivel definir TRIGGERS para serem disparados antes (BEFORE) ou depois (AFTER)
de um evento DML(Data Manipulation Language) INSERT, UPDATE, DELETE ou REPLACE.
Para pegar os valores dos campos nas Triggers usamos OLD.nome_do_campo e NEW.nome_do_campo.
Quando excluimos o registro pegamos o valor usando OLD.nome_do_campo e quando vamos adicionar
um registro usamos NEW.nome_do_campo.
Abaixo regra do uso de OLD e NEW:
Delete usamos somente OLD.nome_do_campo.
Insert somente NEW.nome_do_campo
UPDATE podemos usar OLD.nome_do_campo e NEW.nome_do_campo.
Vou criar duas tabelas 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 primeira Trigger para disparar 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 Trigger para deletar o registro da tb_comentario_historio caso seja deletado o registro 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 Trigger 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 comentário que terei prazer em ajudar.
Comentários são bem vindos assim posso melhorar a qualidade dos tutoriais aqui apresentados.

Marcelo,
nao entendi onde vai as sinteses:
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
??