Utilizando Views, Stored 
Procedures e Triggers 
Daniel Cosme Mendonça Maia 
(daniel_maiabr@yahoo.com.br)
Prática de Laboratório 
 Nesta prática de laboratório, 
utilizaremos o MySQL 5.5 ou superior; 
 Vamos criar um banco de ...
Modelo Relacional 
 Crie um banco de dados com o nome 
“biblio”, a partir do modelo abaixo: 
3
Criando as estruturas 
CREATE DATABASE biblio; 
USE biblio; 
CREATE TABLE livro( 
id_livro int not null primary key 
auto_...
Criando as estruturas 
CREATE TABLE usuario( 
id_usuario int not null primary key auto_increment, 
nome_usuario varchar(10...
Inserindo dados 
INSERT INTO livro (titulo_livro) VALUES 
("Bagagem"), 
("O Cortiço"), 
("Lira dos Vinte Anos"), 
("Quarup...
Inserindo dados 
INSERT INTO usuario (nome_usuario, 
email_usuario, data_nasc_usuario) VALUES 
("João Silva", "joao@email....
Inserindo dados 
INSERT INTO emprestimo (usuario_id_usuario, 
livro_id_livro, data_emprestimo, data_devolucao, 
data_entre...
Criando Views (Visões) 
#Criando uma visão 
(contatos_usuarios) que mostre 
apenas o nome e e-mail dos usuários 
da biblio...
Visualizando dados de uma 
View 
Para visualizar os dados de uma View 
basta utilizar uma consulta SELECT, 
como o exemplo...
Criando Views (Visões) 
#Criando uma visão 
(aniversarios_usuarios) que mostre 
apenas o nome e data de nascimento 
dos us...
Criando Views (Visões) 
#Criando uma visão (emprestimos_realizados) que 
mostre o nome do usuario, título do livro, data d...
Criando Views (Visões) 
#Criando uma visão 
(emprestimos_atrasados) que mostre 
todos os empréstimos atrasados com 
base n...
Criando Views (Visões) 
#Criando uma visão 
(quantidade_emprestimos_usuario) 
que mostre a quantidade de 
emprestimos real...
Alterando dados na View 
#Alterando dados na visão 
UPDATE emprestimos_realizados SET 
entrega = "2014-09-29" WHERE 
usuar...
Stored Procedures 
(Procedimentos Armazenados) 
16
Stored Procedures 
(Procedimentos Armazenados) 
#Criando um procedimento de cadastro de 
empréstimos, que receba o código ...
Stored Procedures 
(Procedimentos Armazenados) 
delimiter $$ 
CREATE PROCEDURE emprestar(IN usuario INT, IN livro 
INT) 
B...
Stored Procedures 
(Procedimentos Armazenados): 
Chamada 
Para utilizar um procedimento 
armazenado basta utilizar o coman...
Stored Procedures 
(Procedimentos Armazenados) 
delimiter $$ 
CREATE PROCEDURE emprestar_retorno(IN usuario INT, IN livro ...
Stored Procedures 
(Procedimentos Armazenados) 
#Criando um procedimento para devolver 
um livro, que receba o código do 
...
Stored Procedures 
(Procedimentos Armazenados) 
delimiter $$ 
CREATE PROCEDURE devolver(IN emprestimo 
INT) 
BEGIN 
SET @d...
Functions (Funções) 
#Criando uma função que retorne a 
quantidade vezes que determinado livro 
foi emprestado. É necessár...
Functions (Funções) 
delimiter $$ 
CREATE FUNCTION quantidade_emprestimo(livro 
INT) RETURNS INT DETERMINISTIC 
BEGIN 
DEC...
Functions (Funções): 
Chamada 
As funções são “chamadas” através de 
uma declaração SQL. Exemplo: 
SELECT quantidade_empre...
Triggers (Gatilhos) 
26
Triggers (Gatilhos) 
#Criando um gatilho que incremente a 
quantidade de livros emprestados para 
um determinado usuário (...
Triggers (Gatilhos) 
delimiter $$ 
CREATE TRIGGER inc_quant_emprestimo 
AFTER INSERT ON emprestimo 
FOR EACH ROW 
BEGIN 
U...
Links importantes 
 Documentação oficial do MySQL: 
◦ http://dev.mysql.com/doc/refman/5.5/en/creat 
e-view.html 
◦ http:/...
Próximos SlideShares
Carregando em…5
×

Prática de laboratório utilizando views, stored procedures e triggers

1.422 visualizações

Publicada em

Prática de Laboratório de Views (Visões), Stored Procedures (Procedimentos Armazenados) e Triggers (Gatilhos) utilizando o Mysql 5.

Publicada em: Dados e análise
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.422
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
99
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Prática de laboratório utilizando views, stored procedures e triggers

  1. 1. Utilizando Views, Stored Procedures e Triggers Daniel Cosme Mendonça Maia (daniel_maiabr@yahoo.com.br)
  2. 2. Prática de Laboratório  Nesta prática de laboratório, utilizaremos o MySQL 5.5 ou superior;  Vamos criar um banco de dados de uma “biblioteca” para simular os comandos aprendidos na aula anterior;  Este modelo é extremamente simplificado e está voltado somente para experimentação didática. 2
  3. 3. Modelo Relacional  Crie um banco de dados com o nome “biblio”, a partir do modelo abaixo: 3
  4. 4. Criando as estruturas CREATE DATABASE biblio; USE biblio; CREATE TABLE livro( id_livro int not null primary key auto_increment, titulo_livro varchar(100) not null); 4
  5. 5. Criando as estruturas CREATE TABLE usuario( id_usuario int not null primary key auto_increment, nome_usuario varchar(100) not null, email_usuario varchar(250), data_nasc_usuario date, quant_emprest_usuario int not null default 0); CREATE TABLE emprestimo( id_emprestimo int not null primary key auto_increment, usuario_id_usuario int not null, livro_id_livro int not null, data_emprestimo date not null, data_devolucao date not null, data_entrega date, foreign key(usuario_id_usuario) references usuario(id_usuario), foreign key(livro_id_livro) references livro(id_livro)); 5
  6. 6. Inserindo dados INSERT INTO livro (titulo_livro) VALUES ("Bagagem"), ("O Cortiço"), ("Lira dos Vinte Anos"), ("Quarup"), ("O Tronco"), ("A escrava Isaura"), ("O Pagador de Promessas"), ("O que é isso, Companheiro?"), ("Vidas Secas"), ("Grande Sertão Veredas"); 6
  7. 7. Inserindo dados INSERT INTO usuario (nome_usuario, email_usuario, data_nasc_usuario) VALUES ("João Silva", "joao@email.com", "1992-08- 09"), ("Maria Mota", "maria@provedor.net", "1984- 05-17"), ("Eduardo Cançado", "edu@email.com", "1996-02-23"), ("Silvia Alencar", "silvia@provedor.net", "1973-09-20"), ("Gabriela Medeiros", "gabi@email.com", "1993-01-10"), ("Karina Silva", "karin@email.com", "1995- 03-25"); 7
  8. 8. Inserindo dados INSERT INTO emprestimo (usuario_id_usuario, livro_id_livro, data_emprestimo, data_devolucao, data_entrega) VALUES (1, 4, "2014-07-15", "2014-08-15", "2014-08-10"), (3, 2, "2014-08-22", "2014-09-22", "2014-09-21"), (2, 6, "2014-08-22", "2014-09-22", null), (2, 8, "2014-09-21", "2014-10-21", null), (1, 10, "2014-09-23", "2014-10-23", "2014-09-29"), (4, 2, "2014-09-23", "2014-10-23", null), (4, 7, "2014-09-23", "2014-10-23", null), (5, 3, "2014-09-24", "2014-10-24", null), (5, 9, "2014-09-24", "2014-10-24", null), (5, 1, "2014-09-24", "2014-10-24", null), (6, 3, "2014-09-01", "2014-10-01", "2014-09-30"); 8
  9. 9. Criando Views (Visões) #Criando uma visão (contatos_usuarios) que mostre apenas o nome e e-mail dos usuários da biblioteca CREATE VIEW contatos_usuarios AS SELECT nome_usuario, email_usuario FROM usuario; 9
  10. 10. Visualizando dados de uma View Para visualizar os dados de uma View basta utilizar uma consulta SELECT, como o exemplo abaixo: SELECT * FROM contatos_usuarios; 10
  11. 11. Criando Views (Visões) #Criando uma visão (aniversarios_usuarios) que mostre apenas o nome e data de nascimento dos usuários da biblioteca CREATE VIEW aniversarios_usuarios AS SELECT nome_usuario, data_nasc_usuario FROM usuario; 11
  12. 12. Criando Views (Visões) #Criando uma visão (emprestimos_realizados) que mostre o nome do usuario, título do livro, data de emprestimo, devolução e entrega de todos os empréstimos realizados na bilioteca CREATE VIEW emprestimos_realizados AS SELECT usuario.nome_usuario usuario, livro.titulo_livro livro, emprestimo.data_emprestimo emprestimo, emprestimo.data_devolucao devolucao, emprestimo.data_entrega entrega FROM usuario, livro, emprestimo WHERE emprestimo.usuario_id_usuario = usuario.id_usuario AND emprestimo.livro_id_livro = livro.id_livro; 12
  13. 13. Criando Views (Visões) #Criando uma visão (emprestimos_atrasados) que mostre todos os empréstimos atrasados com base na visão empréstimos realizados CREATE VIEW emprestimos_atrasados AS SELECT * FROM emprestimos_realizados WHERE devolucao < now() AND entrega is null; 13
  14. 14. Criando Views (Visões) #Criando uma visão (quantidade_emprestimos_usuario) que mostre a quantidade de emprestimos realizados por cada usuario CREATE VIEW quantidade_emprestimos_usuario AS SELECT usuario, count(*) num_livros FROM emprestimos_realizados GROUP BY usuario; 14
  15. 15. Alterando dados na View #Alterando dados na visão UPDATE emprestimos_realizados SET entrega = "2014-09-29" WHERE usuario = "Karina Silva"; 15
  16. 16. Stored Procedures (Procedimentos Armazenados) 16
  17. 17. Stored Procedures (Procedimentos Armazenados) #Criando um procedimento de cadastro de empréstimos, que receba o código do usuário e do livro como parâmetros de entrada. A data de empréstimo e devolução devem ser definidas automaticamente pelo banco de dados, por exemplo, data de empréstimo = hoje, e a data de devolução = 30 dias após o a data de empréstimo. Dica: Usar as funções curdate() e adddate() do MySQL 17
  18. 18. Stored Procedures (Procedimentos Armazenados) delimiter $$ CREATE PROCEDURE emprestar(IN usuario INT, IN livro INT) BEGIN SET @dt_emprestimo = curdate(); SET @dt_devolucao = adddate(@dt_emprestimo, 30); INSERT INTO emprestimo (usuario_id_usuario, livro_id_livro, data_emprestimo, data_devolucao) VALUE (usuario, livro, @dt_emprestimo, @dt_devolucao); END $$ delimiter ; 18
  19. 19. Stored Procedures (Procedimentos Armazenados): Chamada Para utilizar um procedimento armazenado basta utilizar o comando CALL para realizar a “chamada” do procedimento. Exemplo: CALL emprestar(3,8); 19
  20. 20. Stored Procedures (Procedimentos Armazenados) delimiter $$ CREATE PROCEDURE emprestar_retorno(IN usuario INT, IN livro INT, OUT devolucao DATE) BEGIN SET @dt_emprestimo = curdate(); SET @dt_devolucao = adddate(@dt_emprestimo, 30); SELECT @dt_devolucao INTO devolucao; INSERT INTO emprestimo (usuario_id_usuario, livro_id_livro, data_emprestimo, data_devolucao) VALUE (usuario, livro, @dt_emprestimo, @dt_devolucao); END $$ delimiter ; 20
  21. 21. Stored Procedures (Procedimentos Armazenados) #Criando um procedimento para devolver um livro, que receba o código do empréstimo como parâmetro de entrada. A data de entrega deve ser preenchida automaticamente pelo banco de dados (hoje). Dica: Usar a função curdate() do MySQL 21
  22. 22. Stored Procedures (Procedimentos Armazenados) delimiter $$ CREATE PROCEDURE devolver(IN emprestimo INT) BEGIN SET @dt_entrega = curdate(); UPDATE emprestimo SET data_entrega = @dt_entrega WHERE id_emprestimo = emprestimo; END $$ delimiter ; 22
  23. 23. Functions (Funções) #Criando uma função que retorne a quantidade vezes que determinado livro foi emprestado. É necessário receber o código do livro como parâmetro de entrada. Dica: Usar a função count() do MySQL 23
  24. 24. Functions (Funções) delimiter $$ CREATE FUNCTION quantidade_emprestimo(livro INT) RETURNS INT DETERMINISTIC BEGIN DECLARE num INT; SELECT count(*) INTO num FROM emprestimo WHERE livro_id_livro = livro; RETURN num; END $$ delimiter ; 24
  25. 25. Functions (Funções): Chamada As funções são “chamadas” através de uma declaração SQL. Exemplo: SELECT quantidade_emprestimo(2); 25
  26. 26. Triggers (Gatilhos) 26
  27. 27. Triggers (Gatilhos) #Criando um gatilho que incremente a quantidade de livros emprestados para um determinado usuário (campo da tabela usuario). O gatilho deve ser ativado toda vez que ocorrer uma inserção na tabela de empréstimo. 27
  28. 28. Triggers (Gatilhos) delimiter $$ CREATE TRIGGER inc_quant_emprestimo AFTER INSERT ON emprestimo FOR EACH ROW BEGIN UPDATE usuario SET quant_emprest_usuario = quant_emprest_usuario + 1 WHERE id_usuario = NEW.usuario_id_usuario; END $$ delimiter ; 28
  29. 29. Links importantes  Documentação oficial do MySQL: ◦ http://dev.mysql.com/doc/refman/5.5/en/creat e-view.html ◦ http://dev.mysql.com/doc/refman/5.5/en/creat e-procedure.html ◦ http://dev.mysql.com/doc/refman/5.5/en/date-and- time-functions.html ◦ http://dev.mysql.com/doc/refman/5.5/en/set-statement. html ◦ http://dev.mysql.com/doc/refman/5.5/en/trigg er-syntax.html 29

×