Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

21
Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

description

Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans. Visão geral. Visão geral. Um dos bancos de dados mais populares do mundo. Quem usa? NASA, Bradesco, HP, Nokia, Sony, U.S. Army, Google, etc... - PowerPoint PPT Presentation

Transcript of Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

Page 1: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

Triggers e StoreProcedures

Eros SteinFabricio Bellesa

Luiz BorgesMayko Calazans

Page 2: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

Visão geral

Page 3: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

Visão geral

Um dos bancos de dados mais populares do mundo.

Quem usa? NASA, Bradesco, HP, Nokia, Sony, U.S. Army, Google, etc...

Em 16/01/2008 a MySQL AB foi comprada pela Sun por 1 bilhão de dólares.

Page 4: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

Características

Page 5: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

Características

Altíssima portabilidade... Para quase todas as plataformas atuais.

Compatibilidade com varias linguagens de programação tão alta quanto a portabilidade.

Muito estável e de fácil manuseio. Livre com base na GPL(General Public License) Suporta triggers, stored procedures e functions. http://www.mysql.com/

Page 6: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

Tabelas

Page 7: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

Modelo anterior

Page 8: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

Modelo atual

Page 9: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

Razões das mudanças Mudanca 1:

Motivação: Manter histórico do gasto em cada compra, mesmo com alteração

do valor do produto Saídas:

Adicionamos valorPedido na tabela pedido Consequencias positivas

Permite descobrir o valor dos produtos vendidos em qualquer época.

Antes Depois

Page 10: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

Razões das mudanças Mudança 2

Motivação: Ter controle sobre os produtos gastos durante as sessões de

tatuagem ou aplicação de bodypiercing. Saídas:

Criação da tabela produtosUtilizados.

Page 11: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

Razões das mudanças Mudança 3

Motivação: Manter registradas as datas de admissão e demissão dos

funcionários, e resolver problemas com a re-contratação. Saídas:

Criação da tabela historicoFuncionario

Page 12: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans
Page 13: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

Triggers O que é?

Objeto associado a uma tabela; É sempre disparado para responder algum evento

previsto: Comandos DML (INSERT, REPLACE, DELETE ou

UPDATE) Vários triggers podem ser associados a um mesmo BD. Os triggers podem ser disparados antes ou depois dos

eventos. Obs.: É importante definir um finalizador diferente de ; em

uma trigger.

Page 14: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

TriggersCREATE TRIGGER `atualizaProdutosVendidos` AFTER INSERT ON `pedido`

FOR EACH ROW

BEGIN

CALL updateProduto(new.quantidade,new.codProduto);

END;

CREATE TRIGGER `atualizaProdutosUtilizados` AFTER INSERT ON `produtosutilizados`

FOR EACH ROW

BEGIN

CALL updateProduto(new.quantidade,new.codProduto);

END;

Page 15: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

TriggersCREATE TRIGGER `atualizaHistorico` AFTER UPDATE ON `funcionario`

FOR EACH ROW

BEGIN

if(old.statuss = 'd')then

if(new.statuss = 'a') then

INSERT INTO historicoFuncionarioSET codHistoricoFuncionario = NULL,codFuncionario = OLD.codFuncionario,dataAdmissao = NOW(),dataDemissao = null;

end if;

end if;

if(old.statuss = 'a') then

if(new.statuss = 'd') then

call demiteFuncionario(OLD.codFuncionario); end if;

end if;

END;

Page 16: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

TriggersCREATE TRIGGER `adimiteFuncioanario` AFTER INSERT ON `funcionario`

FOR EACH ROW

BEGIN

INSERT INTO historicoFuncionario SET

codHistoricoFuncionario = NULL,

codFuncionario = new.codFuncionario,

dataAdmissao = NOW(),

dataDemissao = null;

END

Page 17: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

TriggersCREATE TRIGGER `atualizaProdutosVendidos` BEFORE INSERT ON

`pedido`

FOR EACH ROW

BEGINcall updateProduto(new.quantidade,new.codProduto);

set new.valorPedido = (select p.precofrom produto as pwhere p.codProduto = new.codProduto) * new.quantidade;

END

Page 18: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans
Page 19: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

Stored Procedure O que é?

É um conjunto de comandos SQL que pode ser armazenados no servidor.

Os clientes não precisam reenviar os comandos individuais mas podem fazer referência às stored procedure(SP).

Usando um Trigger... Podem fornecer um aumento de desempenho:

Já que menos informação é enviada ao servidor, visto que, os SPs ficam no próprio servidor.

Em contra partida, pode gerar lentidão se existirem muitos acessos, já que, SPs favorecem o uso de processos Servidor bound.

Page 20: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

Stored ProcedureCREATE PROCEDURE `demiteFuncionario`(IN `codFuncioarioEntrada` INT)

LANGUAGE SQL

NOT DETERMINISTIC

CONTAINS SQL

SQL SECURITY DEFINER

COMMENT ''

BEGIN

update historicoFuncionario set dataDemissao = now() where codFuncionario = codFuncioarioEntrada;

END

Page 21: Triggers e StoreProcedures Eros Stein Fabricio Bellesa Luiz Borges Mayko Calazans

Stored ProcedureCREATE PROCEDURE `updateProduto`(IN `var` INT, IN `codP` INT)

LANGUAGE SQL

NOT DETERMINISTIC

CONTAINS SQL

SQL SECURITY DEFINER

COMMENT ''

BEGIN

UPDATE produto

SET quantidadeEstoque = quantidadeEstoque - var

WHERE codProduto = codP;

END;