Exemplo de como criar uma View no MySQL. (Virtual Tables)

MySQL, SQL Comentar >> Marcelo Korjenioski

Neste Post irei mos­trar como criar uma View para agi­li­zar sua vida na hora de libe­rar con­sul­tar espe­ci­fi­cas sem ter medo dos usuá­rios matem o banco na hora de criar uma con­sulta já conhecida.

Alguns bene­fí­cios das Views são:
Segu­rança no acesso de dados das taba­las.
Oti­mi­za­ção das consultas.

A sin­taxe basica para criar uma VIEW:

CREATE VIEW view_name AS select_statement

Para efe­tuar a con­sulta da VIEW é seme­lhande a con­sulta de uma TABLE:

SELECT fields FROM view_name

Neste exem­plo vamos criar duas tabe­las para exe­cu­tar nossa VIEW.
Uma tabela com cli­en­tes e outra com a movi­men­ta­ção de caixa deste cli­ente.
Copie o código abaixo e exe­cute no banco de dados.

// Verifica se tabela existe. Caso Exista ele remove.
GO
DROP TABLE IF EXISTS tb_cliente;

// Caso a tabela não exista ele cria uma tabela.
GO
CREATE TABLE IF NOT EXISTS tb_cliente (
pk_cliente	int(10) AUTO_INCREMENT NOT NULL PRIMARY KEY,
nome varchar(60) not null,
cpf varchar(20) not null unique
) Engine =InnoDB;

//------------------------------------------------------------

// Insere os dados na tabela
GO
INSERT INTO tb_cliente (nome, cpf)
VALUES
('Joao',	'12345678910'),
('Paulo',	'12345678911'),
('Marcelo',	'12345678912'),
('Gabriel',	'12345678913'),
('Julio',	'12345678914')

//------------------------------------------------------------

// Caso a tabela não exista ele cria uma tabela.
GO
DROP TABLE IF EXISTS tb_movimentacao;

// Caso a tabela não exista ele cria uma tabela.
GO
CREATE TABLE IF NOT EXISTS tb_movimentacao (
pk_saldo int(10) AUTO_INCREMENT NOT NULL PRIMARY KEY,
fk_cliente  int(10) NOT NULL,
saldo decimal(10,2),
dt_cadastro timestamp default current_timestamp,
CONSTRAINT fk_cliente FOREIGN KEY (fk_cliente) REFERENCES produtos (pk_cliente)
)

//------------------------------------------------------------

// Insere os dados na tabela
GO
INSERT INTO tb_movimentacao (fk_cliente,saldo,dt_cadastro)
VALUES
(1,42, ADDDATE( CURDATE(), INTERVAL 1 DAY)),
(1,51, ADDDATE( CURDATE(), INTERVAL 2 DAY)),
(2,23, ADDDATE( CURDATE(), INTERVAL 1 DAY)),
(3,52, ADDDATE( CURDATE(), INTERVAL 1 DAY)),
(3,68, ADDDATE( CURDATE(), INTERVAL 2 DAY)),
(3,85, ADDDATE( CURDATE(), INTERVAL 3 DAY)),
(4,82, ADDDATE( CURDATE(), INTERVAL 1 DAY)),
(5,110,ADDDATE( CURDATE(), INTERVAL 1 DAY)),
(5,109,ADDDATE( CURDATE(), INTERVAL 2 DAY)),
(5,116,ADDDATE( CURDATE(), INTERVAL 3 DAY)),
(5,129,ADDDATE( CURDATE(), INTERVAL 4 DAY))

Agora vamos criar uma VIEW para efe­tuar a con­sulta de movi­men­ta­ção do cli­ente.
Para isso vamos usar as duas tabe­las para a con­sulta da VIEW.

// Caso a VIEW não exista ele cria uma tabela.
GO
DROP VIEW IF EXISTS viewMovimentacao;
GO
CREATE VIEW viewMovimentacao AS
SELECT
tb_cliente.pk_cliente AS fk_cliente,
tb_cliente.nome AS nome,
tb_cliente.cpf AS cpf,
tb_movimentacao.saldo AS saldo,
tb_movimentacao.dt_cadastro AS dt_cadastro
FROM tb_cliente
INNER JOIN tb_movimentacao ON (pk_cliente = fk_cliente)

Exe­cuta a View.

// Efetua consulta View
GO
SELECT fk_cliente,nome,cpf,saldo,dt_cadastro FROM viewMovimentacao

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Com­par­ti­lhe com seus ami­gos:
  • Print
  • Facebook
  • Google Bookmarks
  • PDF
  • RSS
  • Twitter
  • LinkedIn



  • Alex san­dro

    Boa noite, como pode­ria fazer com três tabe­las ou mais, obrigado.

  • http://www.phaneronsoft.com Mar­celo Korjenioski

    Você irá usar o INNER JOIN para cada nova tabela adicionada.

  • Ane­zio

    cara baca me aju­dou pacas abç

  • Bunz

    Cara belo post me aju­dou pacas abç

  • San­dro lima

    essa view é por cone­xao ao mysql?
    estilo as tabe­las tem­po­ra­rias?
    onde depois q a cone­xao com o banco é fechada, a tb tem­po­ra­ria é excluida.

blog comments powered by Disqus
Designed by NattyWP Wordpress Themes.
Images by desEXign.