segunda-feira, 16 de novembro de 2009

Como criar uma view com MySQL

Bom, se você chegou aqui, significa que deve imaginar as vantagens de se criar uma view, ou então quer aprender um pouco sobre views.

Vou citar as 2 principais vantagens em se criar uma view:

1) Agilidade evitando retrabalho ao montar queryes;

2) Performance. Imagine que você tem uma boa query que levou horas para ser desenvolvida. Esta query traz todos os dados necessários e você considerou a melhor performance. Assim, é extremamente útil criar uma view com esta query. Desta maneira, evita-se que outro usuário possa estar criando a mesma query com uma performance mais baixa.

Bom, vamos ao exemplo prático!

Sintaxe:

CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]

a) CREATE OR REPLACE

A declaração CREATE VIEW cria uma nova view ou substitui uma view existente se for seguida da cláusula OR REPLACE. Se a view não existe a declaração CREATE OR REPLACE VIEW é a mesma coisa que CREATE VIEW. Também vale lembrar que, se a view não existe, CREATE OR REPLACE VIEW é a mesma coisa que ALTER VIEW.

b) Cláusula select_statement

Esta cláusula fornece a definição da exibição. Você pode criar a view a partir de tabelas base ou outras views;

ATENÇÃO:

A definição da view é "congelada" na criação da view. Desta forma é muito importante entender que as tabelas que surgem depois não afetam a definição da view. Imagine que você definiu a view com SELECT * em uma tabela. As colunas adicionadas à tabela depois da criação da view, não se tornam parte da view. Podemos dizer neste caso que a view deverá ser alterada se os novos campos forem interessantes para você.

c) Cláusula ALGORITHM

A cláusula ALGORITHM afeta o modo como o MySQL processa a view. As cláusulas DEFINER e SQL SECURITY especifica o texto de segurança a ser usado durante a verificação dos privilégios de acesso em tempo de invocação da view. A cláusula WITH CHECK OPTION pode ser utilizada para restringir inserções ou alterações de linhas em tabelas referenciadas pela view.

d) Privilégios

O comando CREATE VIEW requer privilégios para a view e alguns privilégios para cada coluna selecionada pelo comando SELECT. Colunas utilizadas em outras partes no SELECT, deve ter permissão para execuar SELECT. Se for utilizado OR REPLACE, você deve ter o privilégio DROP para a view.

e) Especificando a base de dados

Uma view pertence a um banco de dados. Por padrão, um novo modo de exibição é criado no banco de dados padrão. Para criar a exibição explícita de um determinado banco de dados, especifique o nome como db_name.view_name ao criá-lo.

Exemplo simples:
CREATE VIEW teste.viewTeste AS SELECT * FROM tabela1;

Neste exemplo simples, criamos uma view com o nome viewTeste, na base de dados teste, onde o conteúdo da view é SELECT * da tabela base tabela1.

Tabelas base e views compartilham o mesmo namespace na base de dados, então a base de dados não pode contar a mesma tabela base e uma view que tenha o mesmo nome.

Uma view pode ser criada a partir de diversos tipos de SELECT. Pode referir-se às tabelas de base ou outras views. Pode user JOINS, UNION e subqueries.

Neste próximo exemplo, estamos criando a tabela t, com 2 campos do tipo INT. Inserimos algum valor na tabela, criamos a view v e realizamos um SELECT na view. Segue o exemplo:

1. mysql> CREATE TABLE t (qty INT, price INT);
2. mysql> INSERT INTO t VALUES(3, 50);
3. mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
4. mysql> SELECT * FROM v;

+------+-------+-------+
| qty | price | value |
+------+---s----+-------+
| 3 | 50 | 150 |
+------+-------+-------+

Neste exemplo, na linha 3, criamos a view onde temos 3 campos e o terceiro campo é a multiplicação dos campos qty e price e recebe o label "value".

É isso pessoal, no próximo post tratarei de restrições de uma view e trazendo outros exemplos!

Abraço e boa semana!

Fonte:
Create View

Tradução e comentários:
Dilberto Rosa

Nenhum comentário:

Postar um comentário