quinta-feira, 5 de abril de 2007

Triggers e Procedimentos com Mysql



As bases de dados não são mais que reservatórios de informação, sob os quais podemos agir de forma a gerir, manipular e interagir com a informação que aí se encontra.

O que são triggers


Um trigger não é mais do que uma acção ser executada exactamente no momento em é feita algum tipo de alteração na base dados , ou numa(s) tabela(s) específica(s).
A tradudução literal é bastante intuítiva, pois trigger em inglês significa disparo, ou seja , é um disparo (evento) realizado sempre que as alterações se verificam (tabelas ou base de dados).
Este tipo de acção é muito útil, pois podemos programar uma determinada acção a ser executada antes de a informação ser alterada, que a nivel de segurança é uma mais valia.
Tal como as restantes bases de dados relacionais o MySQL a partir da versão 5.0 permite realizar triggers nos sistemas de base de dados.
Os triggers são divididos em duas categorias - tiggers de coluna (row triggers ) e triggers de declaração (statement triggers).
Os "row triggers" são utilizados para definir acções para cada coluna, enquanto que os "statement" são utilizados apenas em conjuntos de declarões que empregem UPDATE, DELETE, INSERT.
Este conjunto de regras aplica-se não só ao MySQL mas a todo o conjunto de bases de dados que utilizem o padrão SQL.

Porquê usar triggers

Existem várias razões para usar triggers.
Os triggers podem automatizar uma quantidade de coisas, que em caso contrário necessitaria de de ser feita.
A razão fundamental pela qual eu uso triggers prende-se ao facto de querer manter a integridade de uma tabela que eventualmente usa outra tabela.
Por exemplo se a tabelaA refrençia a tabelaB e por alguma razão se apaga um valor da tabelaB, podemos usar um trigger para efectau a configuração no tratamento da informação na tabelaA.
Talvez a informação contida na tabelaA deva apagar um valor generico ou poderá acontecer que a essa informação deva ser totalmente apagada.

PRATICANDO COM TRIGGERS


A sintaxe dos trggers no MySQL é idêntica à de outras base de de dados.

DELIMITER
CREATE TRIGGER trigger_nome trigger_tempo trigger_evento ON tabela_nome
FOR EACH ROW
trigger_comandos
END;

DELIMITER ;
Explicando a sintaxe :
trigger_nome - nome do trigger
trigger_tempo - A hora a que o trigger será executado de acordo com o evento.
As opções disponíveis são AFTER e BEFORE;
trigger_evento - o evento que precede o trigger;
As opções disponíveis são INSERT, UPDATE e DELETE;
trigger_comandos - comandos executados pelo trigger (uma ou mais querys SQL).
Elaboração de um exemplo completo
CREATE TRIGGER add_linha_pontos AFTER INSERT ON notas
FOR EACH ROW BEGIN
INSERT INTO pontos SET = NEW.a1;
END;
Criar um relacionamento posterior (com trigger) entre duas tabelas
Código sql da tabela alunos
CREATE TABLE alunos (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(500) NOT NULL,
email VARCHAR(100) NOT NULL
);
Código sql da tabela notas
CREATE TABLE notas (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
pontos INT NOT NULL DEFAULT '0'
);
O trigger necessário para haver relacionamento
DELIMITER
CREATE TRIGGER add_linha_pontos AFTER INSERT ON alunos
FOR EACH ROW BEGIN
INSERT INTO pontos SET user_id=NEW.id, pontos='0';
END;

DELIMITER ;

Sem comentários: