É comum em grandes empresas de tecnologias e desenvolvedoras de Software, terem profissionais específicos para cada área relacionada ao desenvolvimento de um produto, como Programador, Designer, DBA e Engenheiro.
Normalmente o DBA (Administrador de Banco de Dados) tem acesso completo a estrutura do banco de dados, mas não quer ou as regras da empresa limitam que programadores e engenheiros não possuem acesso a toda estrutura e sim apenas o que é de sua responsabilidade. Um exemplo disto é uma empresa que possui um grande sistema que é dividido em várias partes, uma delas é o financeiro, sendo assim os programadores do RH não tem necessidade de ter acesso aos dados do financeiro.
O MySQL conta com os recursos do PL/SQL (Procedural Language/Structured Query Language) presentes no banco de dados da Oracle, como functions, trigger, procedures e view.
Este artigo aborda a utilização das View ou as famosas tabelas virtuais, que são utilizadas para criar visões de uma tabela.
Mas afinal o que realmente é uma View? View é um recurso que pode ser utilizado para criar níveis de acessos em tabelas, como por exemplo, limitar a consultas. Imagine uma tabela que possua: nome, e-mail, telefone e salário. Mas por algum motivo o DBA necessite que o programador tenha apenas acesso ao nome e salário, então criamos uma visão que possibilita apenas a consulta de ambas informações, sendo que o programador não saberá que é uma view, pois as características são as mesmas de uma tabela.
Vamos utilizar a estrutura da tabela abaixo para os exemplos de utilização da View.
Código 01:
CREATE TABLE IF NOT EXISTS usuario(
cod INT (6) NOT NULL AUTO_INCREMENT,
nome VARCHAR (50) NOT NULL,
email VARCHAR (50) NOT NULL,
telefone varchar(12) NOT NULL,
salario FLOAT(10) NOT NULL,
PRIMARY KEY (cod)
);
Com esta tabela, podemos normalmente inserir valores nela, como mostrado abaixo.
Código 02:
INSERT INTO usuario VALUES ("", "Leticia", "leticia@email.com", "0183264000", "2.500");
No exemplo de Insert, conseguimos inserir valores em todas as colunas da tabela, e também podemos fazer consultar e retornar todos os valores cadastrados.
Agora vamos criar uma Visão/View que terá acesso apenas ao nome e salário do usuário cadastrado. Para se criar uma View, utilizamos o código CREATE VIEW, em seguida informamos o nome e depois as colunas e finalmente em qual tabela será criada a visão. Veja o código abaixo.
Código 03:
CREATE VIEW vsalario
AS SELECT nome, salario
FROM usuario;
Create View [Nome_da_visão]
AS SELECT [Coluna1], [Coluna 3]
FROM [Tabela];
Após criar a View, o SGBD apresenta ela como uma tabela, mas fique de olho na especificação Tipo, pois a tabela está sendo usada com INNODB e a visão como vista.
Para realizar uma consulta na View, é o mesmo processo em tabelas, neste exemplo basta fazer um select em vsalario, como mostra o código abaixo. Note que embora tenha sido cadastrado valores na tabela usuário, a consulta em vsalario traz apenas as informações de nome e salário da tabela usuário.
Código 04:
SELECT * FROM vsalario;
Podemos fazer um Insert na visão, as informações serão cadastradas na tabela usuário apenas nos campos que a visão tem acesso, tenha em mente que a visão não é uma tabela separada e sim uma visão de campos específicos ou podemos até comparar como atalhos.
Código 05:
INSERT INTO vsalario VALUES ("Gunnar", "2.746");
Para alterar uma View, o processo é muito similar ao processo de criação, bastando utilizar ALTER VIEW, porém há uma regra a ser seguida, se você quer manter as colunas já existentes, terá que especifica-las novamente, caso contrário as existentes serão perdidas dando espaço a nova.
Código 06:
ALTER VIEW vsalario
AS SELECT nome, telefone, salario
FROM usuario;
SELECT * FROM vsalario;
Note que após o SELECT na View alterada, o campo Telefone correspondente ao usuário Gunnar está vazio, isto ocorreu porquê a view não tem acesso as demais colunas da tabela original, e durante o insert a regra foi respeitada. Isto é bom porque ninguém além do DBA sabe que existe uma visão, para o programador a visão não passa de uma tabela.
Para deletar uma visão, usamos o código DROP VIEW [Nome_da_View], como mostra o código abaixo.
Código 07:
DROP VIEW vsalario;
Após deletar a View, as informações processadas por ela, não será perdida, pois conforme explicado anteriormente, ela funciona como um atalho ou intermédio até a tabela usuário.
Você pode utilizar as View com o inner join ou outras regras mais complexas que acabam fazendo parte da rotina, pois com a View você deixa toda regra implementada e depois basta fazer a consulta na View.
Recomendo a leitura da documentação completa sobre o assunto no site do MySQL, https://dev.mysql.com/doc/refman/5.0/en/create-view.html.
Vamos ficando por aqui, se houver dúvidas deixem nos comentários.