Exemplo de como criar uma trigger no Mysql

De Wiki Locaweb
Ir para: navegação, pesquisa


Índice

Informações gerais sobre Triggers

Para informações gerais sobre Triggers clique aqui


Sobre nossa Trigger de exemplo

Suponhamos que temos um banco de dados com uma tabela que armazena os dados dos empregados da empresa. Se por ventura alguém fizer uma modificação nessa tabela, e alterar especificamente o sobrenome de um funcionário, iremos poder auditar isso através de outra tabela chamada empregados_auditoria. Quem irá preencher a tabela empregados_auditoria é a nossa trigger de exemplo que será executada antes de qualquer UPDATE na tabela empregados.


Criando as tabelas que serão usadas nesse exemplo

tabela de empregados

CREATE TABLE `empregados` (
	  `id_empregado` int(11) NOT NULL,
	  `sobrenome` varchar(50) NOT NULL,
	  `nome` varchar(50) NOT NULL,
	  `email` varchar(100) NOT NULL,
	  `cargo` varchar(50) NOT NULL,
	  PRIMARY KEY  (`id_empregado`)
)

tabela empregados_auditoria

CREATE TABLE empregados_auditoria ( 
	id int(11) NOT NULL AUTO_INCREMENT, 
	id_empregado int(11) NOT NULL, 
	sobrenome varchar(50) NOT NULL,
	modificadoem datetime DEFAULT NULL, 
	acao varchar(50) DEFAULT NULL, 
	PRIMARY KEY (id) 
)


Criando nossa Trigger de exemplo

DELIMITER $$
CREATE TRIGGER antesDeUpdate_empregados 
BEFORE UPDATE ON empregados
FOR EACH ROW BEGIN
INSERT INTO empregados_auditoria
SET acao = 'update',
id_empregado = OLD.id_empregado,
sobrenome = OLD.sobrenome,
modificadoem = NOW(); END$$
DELIMITER ;


Testando o funcionamento da nossa Trigger de exemplo

Como nossa trigger é chamada somente quando é feito um UPDATE na tabela empregados, e essa tabela está vazia no momento, precisamos incluir pelo menos um registro nela:

INSERT INTO `empregados` (`id_empregado`, `sobrenome`, `nome`, `email`, `cargo`) VALUES ('1', 'Silva', 'Ciclano', 'ciclano@teste.com', 'Programador');

Agora precisamos executar um UPDATE que modifique o sobrenome de um empregado para que a trigger antesDeUpdate_empregados seja executada:

UPDATE empregados SET sobrenome = 'Santana' WHERE id_empregado = 1;

Se executarmos um SELECT na tabela empregados poderemos ver o nome do empregado que cadastramos e depois alteramos:

SELECT * FROM empregados;

Para termos certeza de que a trigger foi executada com sucesso basta fazermos uma consulta na tabela empregados_auditoria e veremos que a trigger se encarregou de inserir um registro nessa tabela automaticamente:

SELECT * FROM empregados_auditoria;


Veja também

Links

Ferramentas pessoais
Espaços nominais

Variantes
Ações
Navegação
Ferramentas
Criar um livro