Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Visualizações do MySQL


Aqui, explico o que são as "visualizações" do MySQL e como usá-las.

O MySQL nos fornece a capacidade de criar visualizações . Uma visualização é definido como uma consulta armazenada que, quando invocada, produz um conjunto de resultados. Algumas pessoas se referem a visualizações como "mesas virtuais".

Claro como lama? Vamos tentar de novo.

O que é uma visualização?


Uma exibição é uma consulta que você salva no banco de dados. Você pode executá-lo mais tarde simplesmente chamando essa exibição (em vez de escrever a consulta novamente).

A exibição pode consistir em uma consulta complexa, mas apresentará os resultados como se fosse uma tabela. Portanto, você pode consultar a exibição como se fosse uma tabela.

Por exemplo, você pode ter uma consulta complexa que seleciona dados de três tabelas diferentes. Você pode digitar essa consulta complexa toda vez que precisar executá-la ou salvar a consulta como uma exibição. Depois de salvo como uma visualização, você pode executar um simples SELECT instrução para retornar os resultados da consulta complexa. Mas, é claro, você também pode escrever uma consulta complexa na exibição, se necessário.

Criar uma visualização


A criação de visualizações é muito simples. Você simplesmente precede sua consulta com uma linha de código e a executa. A visualização será criada imediatamente em seu banco de dados.

Sintaxe


Para criar uma exibição, digite a seguinte instrução, seguida pela consulta:
CREATE VIEW view_name AS

Substituir view_name com o nome que você gostaria de usar para a exibição.

Exemplo


Se executarmos o seguinte código no FruitShop base de dados:
CREATE VIEW vFruitInventory AS
SELECT 
    Fruit.FruitName,
    Fruit.Inventory,
    Units.UnitName
FROM
	Fruit INNER JOIN Units ON
    Fruit.UnitId = Units.UnitId;

Agora vemos uma visualização chamada vFruitInventory listados em Visualizações (talvez seja necessário clicar no botão Atualizar botão para os ESQUEMAS primeiro menu):

É uma boa ideia pensar em uma convenção de nomenclatura para suas exibições (como em qualquer outro objeto de banco de dados) e cumpri-la. Muitos desenvolvedores prefixam seus nomes de visualização com v , vw , v_ ou vw_ para que seja mais fácil distinguir visualizações de tabelas em suas consultas. No entanto, outros desenvolvedores discordam dessa convenção e preferem que seus nomes de tabelas e visualizações sejam intercambiáveis.

Consultando uma visualização


Agora podemos consultar a visualização da mesma forma que consultamos uma tabela:
SELECT * FROM vFruitInventory;

Resultado:

Claro, podemos usar uma consulta mais específica também. Por exemplo, este que seleciona apenas os registros em que o inventário é maior ou menor que 10:
SELECT FruitName 
FROM vFruitInventory
WHERE Inventory <= 10;

Mas nós não podemos colunas de consulta que não são referenciadas na exibição (mesmo que estejam nas tabelas subjacentes que a exibição consulta).

Por exemplo, podemos consultar o Fruit mesa assim:
SELECT * 
FROM Fruit
WHERE FruitId = 1;

Mas não podemos consultar o vFruitInventory acima veja assim:
SELECT * 
FROM vFruitInventory
WHERE FruitId = 1;

Isso ocorre porque a visualização não retorna o FruitId coluna. Especificamos as colunas exatas na exibição e essas são todas as que são retornadas. Como mencionado, o conjunto de resultados da visualização é como uma tabela e alguns gostam de chamá-la de "tabela virtual". Se a "tabela" não incluir essas colunas, você não poderá consultá-las.

Em vez de ser uma limitação, isso é na verdade um recurso de visualizações. Esse recurso significa que podemos conceder aos usuários acesso a algumas colunas de uma tabela, mas não outras (através da exibição). Em outras palavras, podemos conceder a um usuário acesso a uma visão sem conceder a esse usuário acesso às tabelas subjacentes que a visão acessa. Algumas tabelas podem armazenar informações confidenciais que o usuário não tem permissão para acessar. Mas as mesmas tabelas também podem armazenar informações não confidenciais de que precisam acessar. O que fazer? Crie uma visualização! E essa exibição pode selecionar apenas as informações não confidenciais dessas tabelas.

Modificando uma visualização


Aqui estão dois métodos diferentes para modificar sua visualização.

Opção 1:use o ALTER VIEW Declaração


Você pode modificar uma visualização usando o ALTER VIEW demonstração. Assim:
ALTER VIEW view_name AS

Substituir view_name com o nome da visualização que você deseja alterar.

Exemplo


Vamos adicionar o Fruit.FruitId campo para a visualização:
ALTER VIEW vFruitInventory AS
SELECT 
	Fruit.FruitId,
    Fruit.FruitName,
    Fruit.Inventory,
    Units.UnitName
FROM
	Fruit INNER JOIN Units ON
    Fruit.UnitId = Units.UnitId;

Agora, quando tentamos retornar o FruitId campo em nossas consultas, obteremos resultados.

Mas observe que não podemos tentar acessar este campo como Fruit.FruitId . Só podemos acessá-lo como FruitId . E é assim que deve ser. Afinal, a view é uma "tabela virtual" e não precisamos conhecer a estrutura das tabelas que ela consulta.

Opção 2:use CREATE OR REPLACE


Observe que a visualização deve existir antes de você executar o ALTER VIEW demonstração. Se não existir, você receberá um erro. Você pode evitar esse problema usando um CREATE OR REPLACE demonstração. Isso criará a exibição se ela não existir ou a substituirá se existir.

Então poderíamos ter criado a view acima assim:
CREATE OR REPLACE VIEW vFruitInventory AS
SELECT 
    Fruit.FruitName,
    Fruit.Inventory,
    Units.UnitName
FROM
	Fruit INNER JOIN Units ON
    Fruit.UnitId = Units.UnitId;

E então podemos atualizá-lo usando o mesmo CREATE OR REPLACE declaração, mas apenas modificando a definição. Por exemplo, adicionando o Fruit.FruitId campo:
CREATE OR REPLACE VIEW vFruitInventory AS
SELECT 
	Fruit.FruitId,
    Fruit.FruitName,
    Fruit.Inventory,
    Units.UnitName
FROM
	Fruit INNER JOIN Units ON
    Fruit.UnitId = Units.UnitId;

Apagando uma visualização


Você pode descartar uma visualização usando o DROP VIEW demonstração. Assim:
DROP VIEW vFruitInventory

A instrução acima removerá a visualização chamada vFruitInventory .

Retirando várias visualizações


Você pode soltar várias visualizações usando o mesmo DROP VIEW demonstração. Basta separar cada nome de visualização com uma vírgula. Assim:
DROP VIEW view_1, view_2 ...

O IF EXISTS Cláusula


Você também pode usar o IF EXISTS cláusula para evitar que ocorra um erro se uma visualização não existir:
DROP VIEW IF EXISTS view_1, view_2 ...