Академический Документы
Профессиональный Документы
Культура Документы
1
Triggers no MySQL
2
“Stored programs” no MySQL
A BD tem objectos definidos em código SQL, armazenadas no
servidor para execução posterior:
● Triggers, diferentes do stored procedure ou stored program: são
chamados automaticamente quando um evento acontece numa
tabela
● O stored program deve ser explicitamente chamado: CALL
● Os procedimentos não devolvem um valor após execução mais
podem modificar os seus parâmetros para inspeção
● As funções são como as funções predefinidas: invocadas numa
expressão elas devolvem um valor após evaluação da expressão
● Existem ainda eventos, tarefas agendadas que o servidor executa
● Vistas, ou “stored queries”: tabelas virtuais (já vimos)
3
Triggers no MySQL
4
Triggers no MySQL
5
Triggers no MySQL
6
Triggers no MySQL
7
Triggers no MySQL
8
Triggers no MySQL
Sintaxe:
CREATE TRIGGER nome tempo evento ON tabela
FOR EACH ROW
BEGIN
…
…
END
9
Triggers no MySQL
● O nome do trigger debe seguir a convenção:
[nome] [tempo]_[nome tabela]_[evento]
● Ex: create trigger novosportos_before_portos_update
● Activação do trigger pode ser BEFORE ou AFTER um evento
actua sobre uma tabela
● O tempo da activação deve ser especificado na definição do trigger
● Os eventos são: INSERT, UPDATE, DELETE
● Estos eventos lançam automaticamente a execução do trigger
● Associados com uma tabela. Se apagar a tabela apaga o trigger
● Os comandos SQL do trigger colocados entre BEGIN....END
● Palavras chaves OLD e NEW utilizadas para se referir a um tuplo
antes da actualização e o novo tuplo (NEW) após a modificação
feita
10
Triggers no MySQL
● Exemplo:
● Temos a tabela viatura: matricula, nome, estado
● Queremos monitorizar manutenções feitas nelas
● Criamos a tabela auditar_viaturas: matricula, data_modif, descr..
● CREATE TRIGGER antes_manut_viatura
● AFTER UPDATE ON viatura
● FOR EACH ROW BEGIN
● INSERT INTO auditar_viaturas
● SET action = 'insert'
● Matricula = OLD.matricula
● data_modif = NOW() descr= NEW.descr
● END
●
11
●
Triggers no MySQL
● Agora actualizamos viatura:
UPDATE viatura
SET estado= “reparada”
E vamos verificar a tabela auditar_viaturas:
SELECT * FROM auditar_viaturas:
Id matricula data_modif descr action
1 34-PO-45 2013-12-02 bla bla update
12
Triggers no MySQL
Como vemos o trigger definido:
SELECT * FROM Information_Schema.Trigger
WHERE Trigger_schema = “nome_bd” AND
Trigger_name = “nome_do_trigger;
14
Triggers no MySQL
Procedimentos e funções:
15
Fim do módulo
16