Uma visualização no MySQL é uma consulta nomeada que pode ser acionada para exibir dados armazenados em outras tabelas. Em outras palavras, as visualizações são tabelas virtuais definidas pelo usuário. As visualizações podem ser usadas para:
- Aprimore a segurança do banco de dados. Se seu banco de dados contiver informações confidenciais que precisam ser protegidas, o uso de uma exibição ajuda a isolar os dados. Uma visualização pode ser criada com um conjunto de resultados predefinido e você pode conceder aos usuários acesso apenas a essa visualização, em vez da tabela que contém informações confidenciais.
- Mova a lógica de negócios complexa para o servidor de banco de dados. Em vez de codificar a lógica de software usada com frequência em diferentes clientes, um desenvolvedor pode mover a lógica para o nível do banco de dados usando uma exibição. Por exemplo, uma visualização pode ser criada para exibir classificações de clientes dependendo de suas vendas totais.
- Reduza a distração de dados. Uma visualização pode combinar resultados de diferentes tabelas e exibir apenas as colunas relevantes quando invocada.
Neste guia você aprenderá:
- Como a sintaxe de uma visualização do MySQL é estruturada.
- Como criar uma visualização do MySQL.
- Como invocar uma visualização do MySQL.
- Como descartar uma visualização no MySQL.
Antes de começar
Para acompanhar este guia, certifique-se de ter o seguinte:
-
Um Linode, no qual você executa o software MySQL. Você pode seguir o guia de Introdução ao Linode para provisionar um Linode.
-
O software do servidor MySQL (ou MariaDB) instalado no seu Linode. Consulte a seção MySQL, que contém guias que descrevem como instalar o MySQL em várias distribuições Linux.
Preparando o banco de dados
Antes de criar suas visualizações MySQL, crie um banco de dados de amostra, defina algumas tabelas e preencha-as com alguns dados primeiro:
-
SSH para o seu Linode. Em seguida, digite este comando para efetuar login no MySQL como usuário root:
mysql -u root -p
Quando solicitado, digite a senha root do seu servidor MySQL e pressione Enter continuar.
Observação
Se sua senha não for aceita, talvez seja necessário executar o comando anterior comsudo
:
sudo mysql -u root -p
-
Se sua senha for aceita, você deverá ver o prompt do MySQL:
mysql >
Observação
Se você estiver usando o MariaDB, poderá ver um prompt como o seguinte:
MariaDB [(none)]>
-
Em seguida, execute este comando SQL para criar um banco de dados de exemplo chamadosample_database
:
CREATE DATABASE sample_database;
Você deve ver esta saída, que confirma que o banco de dados foi criado com sucesso:
Query OK, 1 row affected (0.02 sec)
-
Selecione osample_database
base de dados:
USE sample_database;
Você deve ver esta saída:
Database changed
-
Execute este comando para criar umcustomers
tabela:
CREATE TABLE customers ( customer_id BIGINT PRIMARY KEY AUTO_INCREMENT, customer_name VARCHAR(50) ) ENGINE = InnoDB;
Você deve ver esta saída:
Query OK, 0 rows affected (0.07 sec)
-
Em seguida, preencha oscustomers
tabela com três registros. Execute oINSERT
abaixo comandos um por um:
INSERT INTO customers (customer_name) VALUES ('Leslie'); INSERT INTO customers (customer_name) VALUES ('Andy'); INSERT INTO customers (customer_name) VALUES ('Ben');
A saída abaixo é mostrada após a inserção de cada registro:
Query OK, 1 row affected (0.08 sec) ...
-
Certifique-se de que os registros de amostra foram inseridos no banco de dados executando esteSELECT
comando:
SELECT * FROM customers;
Esta saída aparece, o que confirma que os dados foram inseridos com sucesso na etapa anterior:
+-------------+---------------+ | customer_id | customer_name | +-------------+---------------+ | 1 | Leslie | | 2 | Andy | | 3 | Ben | +-------------+---------------+ 3 rows in set (0.01 sec)
-
Em seguida, crie umsales
tabela. Execute este comando:
CREATE TABLE sales ( customer_id BIGINT PRIMARY KEY AUTO_INCREMENT, monthly_sales DECIMAL(17,2) ) ENGINE = InnoDB;
Esta saída aparece:
Query OK, 0 rows affected (0.07 sec)
-
Em seguida, adicione alguns dados aosales
tabela. Execute estes comandos um por um:
INSERT INTO sales (customer_id, monthly_sales) VALUES ('1','500.27'); INSERT INTO sales (customer_id, monthly_sales) VALUES ('2','7600.32'); INSERT INTO sales (customer_id, monthly_sales) VALUES ('3', '25879.63');
Após inserir cada registro de vendas, esta saída aparece:
Query OK, 1 row affected (0.01 sec) ...
-
Em seguida, execute umSELECT
consulta para verificar se os dados de vendas foram inseridos na tabela:
SELECT * FROM sales;
Esta saída aparece, o que confirma que os dados de vendas foram inseridos com sucesso na etapa anterior:
+-------------+---------------+ | customer_id | monthly_sales | +-------------+---------------+ | 1 | 500.27 | | 2 | 7600.32 | | 3 | 25879.63 | +-------------+---------------+ 3 rows in set (0.00 sec)
Você definiu o banco de dados e as tabelas para trabalhar. A próxima seção descreve a sintaxe de uma visualização do MySQL.
A sintaxe da visualização do MySQL
Esta é uma versão simplificada da sintaxe de visualização do MySQL:
CREATE
VIEW view_name
AS select_statement
-
view_name
:O nome da visualização MySQL deve ser definido aqui. É aconselhável usar um nome descritivo para que você possa lembrar a função da visualização posteriormente.
-
select_statement
:esta é a consulta SQL que é acoplada à visualização definida. Quando a visualização é invocada, o MySQL executa esta consulta para retornar um conjunto de registros.
Criando uma visualização do MySQL
Esta seção apresenta um exemplo de visualização do MySQL. Essa exibição é usada para classificar os clientes do banco de dados de amostra, dependendo do número de vendas mensais.
Certifique-se de estar conectado ao seu servidor MySQL. Em seguida, execute o comando abaixo para criar um
customers_membership
visualizar:CREATE
VIEW customers_membership
AS SELECT sales.customer_id,
customer_name,
(IF(sales.monthly_sales >= 5000, 'PREMIUM', 'BASIC')) as membership
FROM sales
LEFT JOIN customers
ON sales.customer_id = customers.customer_id;
Se a visualização for criada com sucesso, você deverá ver a saída mostrada abaixo:
Query OK, 0 rows affected (0.01 sec)
O comando MySQL acima cria uma visão chamada
customers_membership
que une os customers
e sales
tabela com a PRIMARY KEY
customer_id
. A lógica IF(expression, value_if_true, value_if_false)
A lógica da instrução é usada para determinar a associação do cliente de suas vendas mensais:-
Se as vendas de um cliente forem iguais ou superiores a 5.000, a visualização classificará o cliente comoPREMIUM
membro.
-
Caso contrário (se as vendas estiverem abaixo de5,000
), o cliente é classificado comoBASIC
membro.
O
customers_membership
agora está salva no banco de dados. A próxima seção mostra como chamar uma visualização do MySQL e exibir um conjunto de registros sem consultar as tabelas base diretamente. Invocando uma visualização do MySQL
Esta seção mostra como invocar a visualização MySQL que você criou acima e confirmar se ela funciona conforme o esperado. Depois que uma visualização é criada, ela fica visível como um objeto de banco de dados e pode ser chamada usando o
SELECT
demonstração. -
Para invocar ocustomers_membership
ver, executar:
SELECT * FROM customers_membership;
Se a visualização estiver funcionando conforme o esperado, você deverá ver uma lista de clientes com suamembership
gerada valores com base em suas vendas. DesdeLeslie
's foram inferiores a 5.000 (500,27), a visualização mostra a associação do cliente comoBASIC
.Andy
eBen
as vendas de 7600,32 e 25879,63, respectivamente, e isso os tornaPREMIUM
membros:
+-------------+---------------+------------+ | customer_id | customer_name | membership | +-------------+---------------+------------+ | 1 | Leslie | BASIC | | 2 | Andy | PREMIUM | | 3 | Ben | PREMIUM | +-------------+---------------+------------+ 3 rows in set (0.00 sec)
-
Depois que os dados da tabela base forem atualizados e você invocar uma visualização do MySQL novamente, você deverá ver as informações mais recentes. As exibições extraem informações de suas tabelas base e não armazenam os dados. Para demonstrar como uma visualização extrai informações atualizadas das tabelas base, adicione outro cliente chamadoRajie
aoscustomers
tabela:
INSERT INTO customers (customer_name) VALUES ('Rajie');
Esta saída aparece:
Query OK, 1 row affected (0.01 sec)
-
Em seguida, adicione as informações de vendas mensais do cliente à tabela de vendas:
INSERT INTO sales (customer_id, monthly_sales) VALUES ('4', '147.41');
Esta saída aparece:
Query OK, 1 row affected (0.01 sec)
-
Em seguida, invoque ocustomers_membership
veja novamente:
SELECT * FROM customers_membership;
A saída abaixo é exibida, o que confirma que a visualização é capaz de captar as alterações e extrair as informações dos novos clientes conforme o esperado:
+-------------+---------------+------------+ | customer_id | customer_name | membership | +-------------+---------------+------------+ | 1 | Leslie | BASIC | | 2 | Andy | PREMIUM | | 3 | Ben | PREMIUM | | 4 | Rajie | BASIC | +-------------+---------------+------------+ 4 rows in set (0.00 sec)
Como você pode ver no conjunto de registros de visualização acima, agora você tem um novo cliente chamadoRajie
com umBASIC
Filiação.
Eliminando uma visualização do MySQL
Assim como outros objetos de banco de dados, você pode excluir exibições se não precisar mais delas. Esta é a sintaxe básica para descartar uma visualização do MySQL:
DROP VIEW IF EXISTS view_name;
-
Antes de descartar uma visualização do MySQL, primeiro identifique seu nome executando o comando abaixo:
SHOW FULL TABLES WHERE TABLE_TYPE LIKE 'VIEW';
Uma lista de todas as visualizações no banco de dados selecionado atualmente é exibida:
+---------------------------+------------+ | Tables_in_sample_database | Table_type | +---------------------------+------------+ | customers_membership | VIEW | +---------------------------+------------+ 1 row in set (0.01 sec)
-
Nesse caso, o nome da visualização que você deseja eliminar écustomers_membership
. Então, para excluí-lo, execute:
DROP VIEW IF EXISTS customers_membership;
Certifique-se de que a saída abaixo seja exibida após a exibição ser excluída do banco de dados:
Query OK, 0 rows affected (0.01 sec)
Observação Observe que, se você tentar excluir uma visualização do MySQL que não existe sem usar o
IF EXISTS
palavra-chave, o MySQL lança um erro. -
Quando o comando da etapa 1 é executado novamente, agora não deve haver resultados:
SHOW FULL TABLES WHERE TABLE_TYPE LIKE 'VIEW';
Empty set (0.000 sec)
Mais informações
Você pode querer consultar os seguintes recursos para obter informações adicionais sobre este tópico. Embora estes sejam fornecidos na esperança de que sejam úteis, observe que não podemos garantir a precisão ou pontualidade dos materiais hospedados externamente.
- MySQL - Usando visualizações