Baixe o app para aproveitar ainda mais
Prévia do material em texto
Grupo SER Educacional | Tecnologias e Linguagens de Banco de Dados 1 Diretor Executivo DAVID LIRA STEPHEN BARROS Direção Editorial ANDRÉA CÉSAR PEDROSA Projeto Gráfico MANUELA CÉSAR DE ARRUDA Autor JOÃO DANILO NOGUEIRA Desenvolvedor CAIO BENTO GOMES DOS SANTOS O Autor João Danilo Nogueira Olá. Meu nome é João Danilo. Sou graduado em Ciência da Computação pela Faculdade Grande Fortaleza (FGF) e amo programar. Atualmente, o foco de minha expertise é na área de gerenciamento de projetos, teoria dos números, RSA e criptografia. Vai ser um prazer enorme ajudar VOCÊ a se tornar um excelente desenvolvedor de software ou administrador de banco de dados. Conte comigo para lhe ajudar nessa trajetória rumo ao seu desenvolvimento profissional! Muito sucesso para você. JOÃO DANILO NOGUEIRA “ Iconográficos Olá. Meu nome é Manuela César de Arruda. Sou o responsável pelo projeto gráfico de seu material. Esses ícones irão aparecer em sua trilha de aprendizagem toda vez que: INTRODUÇÃO para o início do desenvolvimento de uma nova competência; DEFINIÇÃO houver necessidade de se apresentar um novo conceito; NOTA quando forem necessários observações ou complementações para o seu conhecimento; IMPORTANTE as observações escritas tiveram que ser priorizadas para você; EXPLICANDO MELHOR algo precisa ser melhor explicado ou detalhado; VOCÊ SABIA? curiosidades e indagações lúdicas sobre o tema em estudo, se forem necessárias; SAIBA MAIS textos, referências bibliográficas e links para aprofundamento do seu conhecimento; REFLITA se houver a necessidade de chamar a atenção sobre algo a ser refletido ou discutido sobre; ACESSE se for preciso acessar um ou mais sites para fazer download, assistir vídeos, ler textos, ouvir podcast; RESUMINDO quando for preciso se fazer um resumo acumulativo das últimas abordagens; ATIVIDADES quando alguma atividade de autoaprendizagem for aplicada; TESTANDO quando o desenvolvimento de uma competência for concluído e questões forem explicadas; Sumário 1 TRIGGERS ......................................................................................................... 6 1.1 Entendendo o conceito ..................................................................................... 7 1.1.1 Vantagens do uso de triggers ................................................................. 8 1.1.2 Desvantagens ....................................................................................... 8 1.2 Triggers em MySQL ........................................................................................... 9 Considerações Finais ............................................................................................ 16 Atividades de Autoaprendizagem .......................................................................... 16 Questionário Avaliativo ........................................................................................ 16 Bibliografia.......................................................................................................... 17 Tecnologias e Linguagens de Banco de Dados | Danilo Nogueira | 6 1 Triggers INTRODUÇÃO: Os triggers, ou gatilhos em português, são um tipo especial de stored procedure. A diferença está no processo que o faz ser executado. O procedimento armazenado caracterizado por um trigger é disparado sempre que determinada condição for satisfeita.Por exemplo, imagine que uma determinada aplicação financeira mantém um controle de caixa sobre as vendas efetuadas. Sempre que forem registradas ou excluídas vendas, essas operações devem ser automaticamente refletidas na tabela de caixa, aumentando ou reduzindo o saldo. Neste caso, deve-se criar uma trigger associada a uma dessas tabelas, disparada toda vez que houver uma inclusão, alteração ou exclusão de linhas na tabela em questão. OBJETIVO: Ao término desta aula você será capaz de criar gatilhos para disparar procedimentos programados, conhecidos como triggers. Tecnologias e Linguagens de Banco de Dados | Danilo Nogueira | 7 1.1 Entendendo o conceito Sabemos que a integridade referencial entre tabelas é um dos principais fundamentos de todo e qualquer banco de dados relacional. É através deste mecanismo que asseguramos as relações lógicas entre os dados gravados em diferentes tabelas. Neste sentido, há situações em que, ao se verificar uma tentativa de violação das regras de integridade referencial de determinada tabela, alguns procedimentos precisam ser executados para que, ao invés de simplesmente impedir-se a atualização “proibida” da referida tabela, outras atualizações em cascata possam ser refletidas em outras tabelas, de modo a manter-se em vigor as regras de integridade referencial estabelecidas. Como estamos falando de um tipo de stored procedure , sabemos que esses procedimentos são executados no nível do SGBD, ou seja, sem a interferência de programas ou comandos externos em SQL. Um trigger sempre estará atrelado a uma tabela, e será executado automaticamente, não podendo ser ignorado. Os triggers não Triggers (ou gatilhos, em português) são disparadores de procedimentos automáticos, condicionados a determinadas circunstâncias previsíveis, atuando sobre o banco de dados, ao nível do SGBD. DEFINIÇÃO Um trigger é, portanto, um tipo especial de stored procedure executado automaticamente quando há uma tentativa de atualização de dados em uma tabela protegida por ele. EXPLICANDO MELHOR Tecnologias e Linguagens de Banco de Dados | Danilo Nogueira | 8 podem ser executados diretamente, ao contrário dos stored procedures, e não podem aceitar parâmetros. 1.1.1 Vantagens do uso de triggers Assim como as stored procedures , os triggers apresentam aspectos positivos e negativos com relação a sua utilização. Como vantagens da utilização dos gatilhos em tabelas, podemos apontar a performance, uma vez que parte do processamento que seria executado na aplicação passa para a ser responsabilidade do SGBD, enxugando os recursos necessários do lado do cliente. Além disto, podemos assegurar que o uso de triggers facilita a manutenção do banco de dados, pois não é necessário atualizar o código fonte da aplicação. 1.1.2 Desvantagens Da mesma forma que apontamos a segurança como um aspecto negativo do uso de stored procedures , reiteramos este fator como sendo um ponto de vulnerabilidade do uso de triggers. Em outras palavras, qualquer pessoa que tenha acesso ao banco de dados poderá visualizar e alterar o código de seus gatilhos. Além disto, o uso de triggers exige maior domínio sobre os recursos do banco de dados por parte da equipe de programação e de administração de dados. Um trigger poderá ser revertido pelo uso do comando “ROLLBACK”. NOTA Tecnologias e Linguagens de Banco de Dados | Danilo Nogueira | 9 1.2 Triggers em MySQL Em um banco de dados MySQL, a sintaxe genérica do comando de criação de um trigger é a seguinte: CREATE TRIGGER <nome> <momento> <evento> ON <tabela> FOR EACH ROW BEGIN /*corpo do código*/ END Onde: • <nome>: é o nome atribuído ao gatilho, seguindo as mesmas normas de nomenclatura dos outros objetos do banco de dados. • <momento>: pode ser “BEFORE” (antes) ou “AFTER” (depois), e representa quando o gatilho será executado. • <evento>: evento que vai disparar o gatilho,podendo ser a execução de um comando INSERT, UPDATE, DELETE, além de outros comandos não abordados anteriormente, como o LOAD DATA e o REPLACE. • <tabela>: nome da tabela para a qual o gatilho será executado. Um mesmo evento e momento de execução, em uma mesma tabela, só poderá ter um gatilho associado. Por exemplo, não é possível criar dois gatilhos AFTER INSERT em uma mesma tabela. Duas cláusulas que você precisa conhecer e entender são as: “NEW” e “OLD”. Elas são utilizadas como identificadoras de registros, respectivamente: • NEW: refere-se ao registro que está sendo incluído em uma determinada tabela, devendo ser utilizada antes do nome da coluna a qual nos referimos. Tecnologias e Linguagens de Banco de Dados | Danilo Nogueira | 10 • OLD: refere-se ao registro que está sendo excluído em uma determinada tabela, devendo ser utilizada antes do nome da coluna a qual nos referimos. Não conseguiu entender? Isso já era esperado. A partir do exemplo a seguir, tudo ficará bem mais claro. Para tanto, vamos retomar nosso banco de dados exemplo? Vamos criar uma coluna chamada “qtdfunc” na tabela “departamentos”. A ideia deste campo é que e le contenha sempre a quantidade de funcionários lotados em cada departamento cadastrado. Assim, teremos três situações (ou eventos) bem distintas: 1. Toda vez que for inserido um novo funcionário na tabela “funcionarios”, o campo “qtdfunc” referente ao departamento informado para o respectivo funcionário deverá ter seu valor incrementado de +1. 2. Toda vez que um funcionário for excluído da tabela “funcionarios”, o campo “qtdfunc” referente ao departamento informado para o respectivo funcionário deverá ter seu valor subtraído de 1. 3. Toda vez que o campo “depto” da tabela “funcionarios” for alterado, o campo “qtdfunc” deverá ser atualizado nos dois departamentos envolvidos na alteração. Por exemplo: se o funcionário teve seu departamento trocado de “1” para “2”, na tabela “departamentos” deverá acontecer dois procedimentos: o campo “qtdfunc” associado ao departamento de código “1” deverá ter seu valor diminuído de 1, e o departamento de código “2” deverá ter o seu valor incrementado de 1. Vamos construir esse gatilho? Para isto, abra o PhpMyAdmin e adicione uma coluna à tabela “departamentos”, como mostra a figura a seguir. Tecnologias e Linguagens de Banco de Dados | Danilo Nogueira | 11 Figura 1 - Adicionando uma coluna à tabela "departamentos" no PhpMyAdmin . O resultado disto é a exibição de um formulário para se cadastrar a nova coluna da tabela. Crie, portanto, o campo “qtdfunc”, conforme apresentado na figura a seguir. Figura 2 - Criando a coluna "qtdfunc" na tabela "departamentos". Ao clicar em “Save” (salvar), você terá executado o seguinte comando DDL: ALTER TABLE `departamentos` ADD `qtdfunc` INT(5) NOT NULL AFTER `nomedepto`; Agora que já temos um campo acumulador de funcionários na tabela “departamentos”, atualize manualmente o valor deste campo, para que ele reflita a quantidade de funcionários em cada departamento. O resultado disto poderá ser o exibido na figura seguinte: http://localhost/phpmyadmin/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/alter-table.html http://localhost/phpmyadmin/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/alter-table.html http://localhost/phpmyadmin/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/numeric-types.html http://localhost/phpmyadmin/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/logical-operators.html#operator_not Tecnologias e Linguagens de Banco de Dados | Danilo Nogueira | 12 Figura 3 - Acumulação dos funcionários por departamento gravada no campo "qtdfunc". Agora vamos começar a criação dos triggers? Como os eventos ocorrem na tabela “funcionarios”, é nela que iremos clicar e, na sequência, selecionar a aba “Triggers” no PhpMyAdmin, como ilustrado a seguir. Figura 4 - Aba Triggers no PhpMyAdmin, com a tabela "funcionarios" selecionada. Ao clicar em “New” (novo), um formulário intitulado “Add Trigger” irá aparecer solicitando o preenchimento dos seguintes campos: Tecnologias e Linguagens de Banco de Dados | Danilo Nogueira | 13 Figura 5 - Formulário de inserção de Trigger. • Trigger name: o nome da trigger a ser adicionada à tabela. • Table: selecione o nome da tabela. • Time: selecione o tempo em que a trigger será executada, se antes (BEFORE) ou depois (AFTER) do evento. • Event: selecione o comando que reflete o evento disparador da trigger. Lembrando que este evento poderá ser a execução de um comando “INSERT”, “UPDATE” ou “DELETE”. • Definition: digite o código SQL capaz de executar os procedimentos desejados para este evento, como no exemplo a seguir: BEGIN UPDATE departamentos SET `departamentos`.`qtdfunc` = `departamentos`.`qtdfunc` + 1 WHERE `departamentos`.`numdepto` = NEW.`depto`; END Após este preenchimento, clique em “GO” (vá) e confira o resultado: CREATE TRIGGER `Add_Func` AFTER INSERT ON `funcionarios` FOR EACH ROW BEGIN UPDATE departamentos SET `departamentos`.`qtdfunc` = http://localhost/phpmyadmin/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/create-trigger.html http://localhost/phpmyadmin/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/create-trigger.html http://localhost/phpmyadmin/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/insert.html http://localhost/phpmyadmin/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/update.html http://localhost/phpmyadmin/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/set.html Tecnologias e Linguagens de Banco de Dados | Danilo Nogueira | 14 `departamentos`.`qtdfunc` + 1 WHERE `departamentos`.`numdepto` = NEW.`depto`; END Pronto! Gatilho criado e pronto para ser testado. Para isto, tente incluir um novo funcionário na tabela “funcionarios”, lotado no departamento de código 2 (Marketing). Para isto, você pode se utilizar do seguinte comando: INSERT INTO `funcionarios` (`matric`, `nome`, `depto`, `salario`, `telefone`) VALUES ('6', 'ZÉLIA BARROSO', '2', '13450', '(11)988771122'); Será que o campo “qtdfunc” da outra tabela (“departamentos”) teve seu valor alterado para +1 para o departamento de código 2 (Marketing)? Figura 6 - Acumulação de mais um funcionário no campo "qtdfunc", disparado pelo Trigger. Vamos praticar? Agora é com você! Leia atentamente a atividade enunciada a seguir para consolidar o seu aprendizado. Pesquise mais sobre a criação de gatilhos e construa as triggers referentes aos outros dois eventos possíveis para a tabela “funcionarios”, ou seja, uma para o evento DELETE e outra para o UPDATE, ou seja, para o caso de haver atualização do departamento do funcionário. ATIVIDADES http://localhost/phpmyadmin/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/insert.html http://localhost/phpmyadmin/url.php?url=https://dev.mysql.com/doc/refman/5.5/en/miscellaneous-functions.html#function_values Tecnologias e Linguagens de Banco de Dados | Danilo Nogueira | 15 Para cada trigger, realize um teste e monitore os resultados desse teste sobre as tabelas exemplo. NOTA Tecnologias e Linguagens de Banco de Dados | Danilo Nogueira | 16 Considerações Finais SAIBA MAIS: Quer se aprofundar nos estudos das triggers? Então acesse e leia este link de aprofundamento: Artigo: “MySQL Básico: Triggers”, acessível pelo link: https://www.devmedia.com.br/mysql-basico-triggers/37462(Acesso em 21/12/2017). Atividades de Autoaprendizagem ATIVIDADES: Pronto para consolidar seus conhecimentos? Leia atentamente o enunciado de sua atividade de autoaprendizagem proposta para esta aula. Se você está fazendo o seu curso presencialmente, é só abrir o seu caderno de atividades. Se você estiver cursando na modalidade de EAD (Educação a Distância), acesse a sua trilha de aprendizagem no seu ambiente virtual e realize a atividade de modo online. Você pode desenvolver esta atividade sozinho ou em parceria com seus colegas de turma. Dificuldades? Poste suas dúvidas no fórum de discussões em seu ambiente virtual de aprendizagem. Concluiu a sua atividade? Submeta o resultado em uma postagem diretamente em seu ambiente virtual de aprendizagem e boa sorte! Questionário Avaliativo TESTANDO: Chegou a hora de você provar que aprendeu tudo o que foi abordado ao longo desta aula. Para isto, leia e resolva atentamente as questões do seu caderno de atividades. Se você estiver fazendo este curso a distância, acesse o QUIZ (Banco de Questões) em seu ambiente virtual de aprendizagem. https://www.devmedia.com.br/mysql-basico-triggers/37462 Tecnologias e Linguagens de Banco de Dados | Danilo Nogueira | 17 Bibliografia RODRIGUES, J. (21 de Dez de 2017). MySQL Básico: Triggers. DevMedia. Acesso em 21 de Dez de 2017, disponível em https://www.devmedia.com.br/mysql-basico-triggers/37462 Tecnologias e Linguagens de Banco de Dados | Danilo Nogueira | 18
Compartilhar