SlideShare ist ein Scribd-Unternehmen logo
1 von 29
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 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
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_increment, 
titulo_livro varchar(100) not null); 
4
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
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
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
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
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
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
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
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
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
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
Alterando dados na View 
#Alterando dados na visão 
UPDATE emprestimos_realizados SET 
entrega = "2014-09-29" WHERE 
usuario = "Karina Silva"; 
15
Stored Procedures 
(Procedimentos Armazenados) 
16
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
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
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
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
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
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
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
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
Functions (Funções): 
Chamada 
As funções são “chamadas” através de 
uma declaração SQL. Exemplo: 
SELECT quantidade_emprestimo(2); 
25
Triggers (Gatilhos) 
26
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
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
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

Weitere ähnliche Inhalte

Was ist angesagt?

Aula 1 - Introdução ao Conteúdo de Banco de Dados
Aula 1 - Introdução ao Conteúdo de Banco de DadosAula 1 - Introdução ao Conteúdo de Banco de Dados
Aula 1 - Introdução ao Conteúdo de Banco de DadosHenrique Nunweiler
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)Janynne Gomes
 
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERBanco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERRangel Javier
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
Banco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoBanco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoLeinylson Fontinele
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoRangel Javier
 
Banco de Dados I - Aula 09 - Normalização de Dados
Banco de Dados I - Aula 09 - Normalização de DadosBanco de Dados I - Aula 09 - Normalização de Dados
Banco de Dados I - Aula 09 - Normalização de DadosLeinylson Fontinele
 
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)Leinylson Fontinele
 
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)Leinylson Fontinele
 
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)Leinylson Fontinele
 
Banco de Dados I Aula 02 - Introdução aos Bancos de Dados
Banco de Dados I  Aula 02 - Introdução aos Bancos de DadosBanco de Dados I  Aula 02 - Introdução aos Bancos de Dados
Banco de Dados I Aula 02 - Introdução aos Bancos de DadosLeinylson Fontinele
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesLeinylson Fontinele
 
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de Dados
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de DadosBanco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de Dados
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de DadosLeinylson Fontinele
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPDaniel Brandão
 
Aula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de SoftwareAula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de SoftwareCloves da Rocha
 
Banco de Dados I - Aula Prática - Criando o Primeiro Banco
Banco de Dados I - Aula Prática - Criando o Primeiro BancoBanco de Dados I - Aula Prática - Criando o Primeiro Banco
Banco de Dados I - Aula Prática - Criando o Primeiro BancoLeinylson Fontinele
 

Was ist angesagt? (20)

Aula 1 - Introdução ao Conteúdo de Banco de Dados
Aula 1 - Introdução ao Conteúdo de Banco de DadosAula 1 - Introdução ao Conteúdo de Banco de Dados
Aula 1 - Introdução ao Conteúdo de Banco de Dados
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
 
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERBanco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Banco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoBanco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e Especialização
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
 
Sistemas de Arquivos do Windows
Sistemas de Arquivos do WindowsSistemas de Arquivos do Windows
Sistemas de Arquivos do Windows
 
Banco de Dados I - Aula 09 - Normalização de Dados
Banco de Dados I - Aula 09 - Normalização de DadosBanco de Dados I - Aula 09 - Normalização de Dados
Banco de Dados I - Aula 09 - Normalização de Dados
 
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
 
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
 
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
 
Banco de Dados I Aula 02 - Introdução aos Bancos de Dados
Banco de Dados I  Aula 02 - Introdução aos Bancos de DadosBanco de Dados I  Aula 02 - Introdução aos Bancos de Dados
Banco de Dados I Aula 02 - Introdução aos Bancos de Dados
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e Funções
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de Dados
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de DadosBanco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de Dados
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de Dados
 
Javascript aula 01 - visão geral
Javascript   aula 01 - visão geralJavascript   aula 01 - visão geral
Javascript aula 01 - visão geral
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 
Aula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de SoftwareAula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de Software
 
Banco de Dados I - Aula Prática - Criando o Primeiro Banco
Banco de Dados I - Aula Prática - Criando o Primeiro BancoBanco de Dados I - Aula Prática - Criando o Primeiro Banco
Banco de Dados I - Aula Prática - Criando o Primeiro Banco
 
Introducao a informatica
Introducao a informaticaIntroducao a informatica
Introducao a informatica
 

Andere mochten auch

Mysql para aplicações Web escaláveis
Mysql para aplicações Web escaláveisMysql para aplicações Web escaláveis
Mysql para aplicações Web escaláveisElton Minetto
 
Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggersflaviognm
 
Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri...
Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri...Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri...
Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri...MySQL Brasil
 
Livro Mini-Curso de Haskell
Livro Mini-Curso de HaskellLivro Mini-Curso de Haskell
Livro Mini-Curso de HaskellMikeNandes
 
Algoritmo e lógica de programação
Algoritmo e lógica de programaçãoAlgoritmo e lógica de programação
Algoritmo e lógica de programaçãojose alisson
 
Como Estudar Sozinho em Casa
Como Estudar Sozinho em CasaComo Estudar Sozinho em Casa
Como Estudar Sozinho em CasaRichard Reinaldo
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellSérgio Souza Costa
 
Ubuntu Touch - O Linux de bolso.
Ubuntu Touch - O Linux de bolso.Ubuntu Touch - O Linux de bolso.
Ubuntu Touch - O Linux de bolso.Alessandro Faria
 
Autômatos Celulares
Autômatos CelularesAutômatos Celulares
Autômatos CelularesMarcelo Ramos
 
Comunicação e Empregabilidade
Comunicação e EmpregabilidadeComunicação e Empregabilidade
Comunicação e Empregabilidademairamed
 
Algoritmo de euclides
Algoritmo de euclidesAlgoritmo de euclides
Algoritmo de euclideslizethkathe
 
08 linguagens recursivamente enumeraveis e sensiveis ao contexto
08   linguagens recursivamente enumeraveis e sensiveis ao contexto08   linguagens recursivamente enumeraveis e sensiveis ao contexto
08 linguagens recursivamente enumeraveis e sensiveis ao contextoComputação Depressão
 
Linux Ubuntu Server - Configurar modo grafico do user root
Linux Ubuntu Server - Configurar modo grafico do user rootLinux Ubuntu Server - Configurar modo grafico do user root
Linux Ubuntu Server - Configurar modo grafico do user rootRui Lopes
 

Andere mochten auch (20)

Advanced SQL
Advanced SQLAdvanced SQL
Advanced SQL
 
Mysql para aplicações Web escaláveis
Mysql para aplicações Web escaláveisMysql para aplicações Web escaláveis
Mysql para aplicações Web escaláveis
 
Sumario9788575222102
Sumario9788575222102Sumario9788575222102
Sumario9788575222102
 
Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggers
 
Mysql for IBMers
Mysql for IBMersMysql for IBMers
Mysql for IBMers
 
Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri...
Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri...Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri...
Otimizando a segurança, o desempenho e a disponibilidade com o MySQL Enterpri...
 
Livro Mini-Curso de Haskell
Livro Mini-Curso de HaskellLivro Mini-Curso de Haskell
Livro Mini-Curso de Haskell
 
Algoritmo e lógica de programação
Algoritmo e lógica de programaçãoAlgoritmo e lógica de programação
Algoritmo e lógica de programação
 
Como Estudar Sozinho em Casa
Como Estudar Sozinho em CasaComo Estudar Sozinho em Casa
Como Estudar Sozinho em Casa
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo Haskell
 
Haskell
HaskellHaskell
Haskell
 
Ubuntu Touch - O Linux de bolso.
Ubuntu Touch - O Linux de bolso.Ubuntu Touch - O Linux de bolso.
Ubuntu Touch - O Linux de bolso.
 
Autômatos Celulares
Autômatos CelularesAutômatos Celulares
Autômatos Celulares
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Turing seminar-2012
Turing seminar-2012Turing seminar-2012
Turing seminar-2012
 
Comunicação e Empregabilidade
Comunicação e EmpregabilidadeComunicação e Empregabilidade
Comunicação e Empregabilidade
 
Algoritmo de euclides
Algoritmo de euclidesAlgoritmo de euclides
Algoritmo de euclides
 
08 linguagens recursivamente enumeraveis e sensiveis ao contexto
08   linguagens recursivamente enumeraveis e sensiveis ao contexto08   linguagens recursivamente enumeraveis e sensiveis ao contexto
08 linguagens recursivamente enumeraveis e sensiveis ao contexto
 
Algoritmo de Euclides
Algoritmo de EuclidesAlgoritmo de Euclides
Algoritmo de Euclides
 
Linux Ubuntu Server - Configurar modo grafico do user root
Linux Ubuntu Server - Configurar modo grafico do user rootLinux Ubuntu Server - Configurar modo grafico do user root
Linux Ubuntu Server - Configurar modo grafico do user root
 

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

Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01julianabdpaiva
 
ODI Tutorial - Desenvolvendo Procedures
ODI Tutorial - Desenvolvendo ProceduresODI Tutorial - Desenvolvendo Procedures
ODI Tutorial - Desenvolvendo ProceduresCaio Lima
 
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasAula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasCJR, UnB
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
 
Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Osny Pereira Filho
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.jsGiovanni Bassi
 
T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012Rodrigo Ribeiro
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - TabelasDalton Martins
 
Portfólio ADS- sem 4 - atividade em grupo
Portfólio ADS- sem 4 - atividade em grupoPortfólio ADS- sem 4 - atividade em grupo
Portfólio ADS- sem 4 - atividade em grupoAdilson Nascimento
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdoJorge Luís Gregório
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDBBrunno Gomes
 
Backbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webBackbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webHenrique Gogó
 
[TDC2016] Apache Cassandra Estratégias de Modelagem de Dados
[TDC2016]  Apache Cassandra Estratégias de Modelagem de Dados[TDC2016]  Apache Cassandra Estratégias de Modelagem de Dados
[TDC2016] Apache Cassandra Estratégias de Modelagem de DadosEiti Kimura
 

Ähnlich wie Prática de laboratório utilizando views, stored procedures e triggers (20)

Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
 
Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01
 
ODI Tutorial - Desenvolvendo Procedures
ODI Tutorial - Desenvolvendo ProceduresODI Tutorial - Desenvolvendo Procedures
ODI Tutorial - Desenvolvendo Procedures
 
Vb
VbVb
Vb
 
Python 04
Python 04Python 04
Python 04
 
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias RelacionadasAula 1 - Curso de PHP/CI e Tecnologias Relacionadas
Aula 1 - Curso de PHP/CI e Tecnologias Relacionadas
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.js
 
T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - Tabelas
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
Implementação de
Implementação de Implementação de
Implementação de
 
Portfólio ADS- sem 4 - atividade em grupo
Portfólio ADS- sem 4 - atividade em grupoPortfólio ADS- sem 4 - atividade em grupo
Portfólio ADS- sem 4 - atividade em grupo
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Backbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webBackbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações web
 
Crud
CrudCrud
Crud
 
[TDC2016] Apache Cassandra Estratégias de Modelagem de Dados
[TDC2016]  Apache Cassandra Estratégias de Modelagem de Dados[TDC2016]  Apache Cassandra Estratégias de Modelagem de Dados
[TDC2016] Apache Cassandra Estratégias de Modelagem de Dados
 

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

  • 1. Utilizando Views, Stored Procedures e Triggers Daniel Cosme Mendonça Maia (daniel_maiabr@yahoo.com.br)
  • 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. Modelo Relacional  Crie um banco de dados com o nome “biblio”, a partir do modelo abaixo: 3
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Alterando dados na View #Alterando dados na visão UPDATE emprestimos_realizados SET entrega = "2014-09-29" WHERE usuario = "Karina Silva"; 15
  • 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. 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. 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. 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. 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. 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. 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. 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. Functions (Funções): Chamada As funções são “chamadas” através de uma declaração SQL. Exemplo: SELECT quantidade_emprestimo(2); 25
  • 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. 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. 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