SQL Avançada

Luídne Mota, 16 de março de 2012

Views
Views ou simplesmente, Visões em banco de dados são tabelas virtuais criadas a partir de uma ou mais tabelas físicas de um banco de dados. Ela permite fazer consultas aos dados de maneira virtual, isto é, fazer consultas sem que sejam realmente nas tabelas físicas, isso ajuda na segurança de informações. Por exemplo: Podemos criar uma tabela que será usada para as consultas que serão feitas pelos alunos, desta maneira, podemos atribuir à essa nova visão apenas os campos que lhe interessam como nome e sua média de uma disciplina. Isto aumenta a segurança, pois não terá como por algum método hacker obter os outros dados como a média de outros alunos, porque estão na tabela física. Um uso que também podemos fazer com visões, acontece quando precisamos de alguns dados restritos numa tabela separada. Fazemos isto criando uma visão, ou mais se necessário, sem precisar duplicar os dados de uma tabela em outra no mesmo banco de dados. A sintaxe básica de uma visão é a seguinte: CREATE VIEW nome_da_visao AS SELECT t1.campo1, t2.campo2 FROM tabela1 t1, tabela2 WHERE t1.campo1<>12 AND t2.campo1 LIKE ‘nome%’;

É bom usarmos visões apenas quando se tratar de consultas, pois se pensarmos em fazer inserções, alterações ou exclusões podem tornar uma visão muito complexa. Em geral, uma visão suporta os mesmos comandos de uma tabela, afinal, visões também são tabelas, só que, virtuais.

” reconhecendo como se ali fosse o final do procedimento. Então.. o uso de Stored Procedure provê a melhora de performance. sem Stored Procedures. Importante: Quando você usa “END. Por isso. Tal caso. Por isso. vamos iniciar a criação de um Stored Procedure. Por exemplo.” para fechar o corpo do procedimento antes dele vem algum comando também terminado com “. Sua sintaxe base é: CREATE PROCEDURE nome() BEGIN comandos. END. podemos fazer o seguinte Stored Procedure: CREATE PROCEDURE todos_professores() BEGIN SELECT * FROM professor. ou procedimento armazenado é uma coleção de comandos SQL que encapsula comandos para chamá-los como se fosse um comando só... É como de escrever um programa dentro do próprio servidor para ser executado dentro do próprio servidor. etc.Stored Procedure Stored Procedure. equilibrar a balança a qual os respectivos servidores são os pesos. O comando para mudar é o seguinte: DELIMITER // . O objetivo da criação do Stored Procedure foi o equilíbrio da carga entre o servidor de aplicação e o servidor de bando de dados. antes de criamos nossa Stored Procedure vamos mudar o delimitador SQL padrão para “//”. Serve para resolver tarefa que são executados com alta frequência.. END. essas tarefas quando executadas demasiadamente no servidor de banco de dados lhe faz estar sobrecarregado ocasionando perda de desempenho. ou seja. além de criar mecanismos de segurança na aplicação. Para executá-lo basta chamá-lo pelo nome que demos a ele: CALL todos_professores().

Se tiver apenas um comando dentro do Stored Procedure não é necessário usar os delimitadores do corpo BEGIN e END. WHILE. END// . ele deve ter nenhum. ELSE SELECT 0. END// Agora com WHILE: CREATE PROCEDURE incrementa(parametro int) BEGIN WHILE paramentro >= 0 DO INSERT INTO outratabela(valor) VALUES(parametro). Veja como se cria um com parâmetro: CREATE PROCEDURE nome(variavel int) BEGIN SELECT * FROM professor WHERE idprofessor=variavel. Como dito no começo desse artigo. um ou mais parâmetros. Stored Procedure é como se fosse um programa. SET parametro = parametro + 1. IF(var > 0) THEN SELECT * FROM professor WHERE idprofessor=variavel. END IF. END// Até aqui fizemos um simples Stored Procedure. CREATE PROCEDURE nome(variavel int) BEGIN DECLARE var INT. SET var = variavel. END WHILE. então. Vamos torná-lo mais próximo a um “programa” criando variáves e estruturas de controle como IF ELSE.

Triggers. Solução: usamos uma trigger para que quando esta tabela for alterada possamos tomar alguma providência em relação à outra tabela. 3. Existem três tipos de trigger que podemos criar: 1.  Garantir desempenho (exemplo: atualizar o saldo de uma conta-corrente após uma transação. Para resolver este gargalo dentro do banco de dados usamos triggers. podem ser usadas para gerar dados em uma tabela de históricos do próprio bando de dados. Para exclusão de dados: DELETE. Um problema: quando temos o conteúdo de uma tabela alterado. Outros exemplos que podemos citar do benefício são os seguinte:  Executar regras de negócio (exemplo: notificar um gerente de estoque quando o estoque de produtos estiver baixo). .  Replicar dados (exemplo: replicar dados em outro banco de dados como forma de monitoramento). para consultas rápidas ao saldo). nesta alteração outros dados de outras tabelas podem estar relacionados e. por exemplo.Agora chamamos a rotina: CALL incrementa(1). é um recurso usado em banco de dados SQL que visa execução de determinados procedimentos que são executados automaticamente quando é disparado algum evento em uma tabela ou uma view. consequentemente. alguns dados podem ficar sem nexo por isto. E para excluí-la: DROP TRIGGER nome. 2. Para atualização de dados: UPDATE. ou Gatilho. Trigger Trigger. Para inserção de dados: INSERT. Sua sintaxe básica é: CREATE TRIGGER nome TIME EVENT ON tabela FOR EACH ROW instrucoes.

Mas você pode ter um BEFORE UPDATE e um BEFORE INSERT. ainda.nome é o campo nome da tabela cliente que será o novo dados inserido em todos registros da tabela auxiliar. DELETE FROM tabela3 WHERE campo3 = NEW. E. Se você for usar mais instruções. .Agora vamos criar um trigger básico: CREATE TRIGGER tg_cliente_cadastrar AFTER INSERT ON cliente FOR EACH ROW INSERT INTO auxiliar SET telefone = NEW.contato. ações de chaves estrangeiras não ativam triggers. delimitar a instrução SQL com outro delimitador que você mesmo especificar ao contrário do padrão que é “. IMPORTANTE: Não pode haver duas trigger numa dada tabela que tenha a mesma ação e evento. por exemplo. Por exemplo.campo2. ou um BEFORE UPDATE e um AFTER UPDATE.campo1. DELETE ou UPDATE. você não pode ter dois BEFORE UPDATE para uma tabela.campo1. O EVENT pode ser: INSERT. Pode ser NEW ou OLD. UPDATE e DELETE. você precisa delimitar o corpo das instruções com BEGIN e AND.”. INSERT. O NEW. Nota: Atualmente. Por exemplo: DELIMITER // CREATE TRIGGER teste_trigger AFTER INSERT ON tabela1 FOR EACH ROW BEGIN INSERT INTO tabela2 SET campo1 = NEW. UPDATE tabela4 SET campoA = campoB + 1 WHERE campo4 = NEW. END. O TIME pode ser: AFTER ou BEFORE.

” para fechar o corpo do procedimento antes dele vem algum comando também terminado com “. antes de criamos nossa Stored Procedure vamos mudar o delimitador SQL padrão para “//”.Importante: Quando você usa “END. O comando para mudar é o seguinte: DELIMITER // .” reconhecendo como se ali fosse o final do procedimento. Por isso.