Ícone do site dfilitto

SQL VIEWs: O Guia Direto para Simplificar e Proteger seu Banco de Dados

Curso gratuito - Como trabalhar com o Banco de dados MySQL

No mundo do SQL, gastamos muito tempo escrevendo consultas complexas. E se você pudesse salvar uma consulta SELECT e tratá-la como uma tabela? É exatamente isso que uma VIEW faz.

Uma VIEW (ou “Visão”) não é uma tabela real. Ela não armazena dados. Pense nela como um atalho ou uma consulta pré-definida que recebe um nome.

Quando você consulta uma VIEW, o banco de dados (como o MySQL) simplesmente executa a consulta SELECT original que você usou para criá-la.

Por que usar VIEWs?

Existem dois motivos principais que justificam o uso de VIEWs em qualquer projeto:

  1. Simplificação: Se você precisa executar um JOIN complexo de cinco tabelas toda vez que gera um relatório, você pode salvar esse JOIN como uma VIEW. A partir daí, em vez de 30 linhas de SQL, você escreve apenas: SELECT * FROM v_Relatorio_Complexo;
  2. Segurança (Abstração): Este é o uso mais poderoso. Imagine uma tabela Funcionarios com colunas sensíveis como salario. Você não quer que todos os usuários do banco vejam essa informação. Você pode criar uma VIEW que seleciona apenas as colunas “seguras” (como nome e cargo) e dar permissão de acesso ao usuário apenas nessa VIEW, e não na tabela original.

Exemplo Prático no MySQL

Vamos usar um cenário simples com duas tabelas:

SQL

-- Tabelas de exemplo
CREATE DATABASE IF NOT EXISTS Exemplo_Views;
USE Exemplo_Views;

CREATE TABLE Departamentos (
    id_depto INT PRIMARY KEY,
    nome_depto VARCHAR(100)
);

CREATE TABLE Funcionarios (
    id_func INT PRIMARY KEY,
    nome_func VARCHAR(150),
    cargo VARCHAR(100),
    salario DECIMAL(10, 2),
    id_depto INT,
    FOREIGN KEY (id_depto) REFERENCES Departamentos(id_depto)
);

-- Dados
INSERT INTO Departamentos VALUES (1, 'Engenharia'), (2, 'Marketing');
INSERT INTO Funcionarios VALUES 
(101, 'Ana Silva', 'Engenheira Sênior', 14000.00, 1),
(102, 'Bruno Costa', 'Engenheiro Pleno', 9500.00, 1),
(103, 'Carla Mendes', 'Gerente de Marketing', 12000.00, 2);

Caso de Uso 1: Simplificando um JOIN

A consulta para ver funcionários e seus departamentos é um JOIN repetitivo:

SQL

SELECT F.nome_func, F.cargo, D.nome_depto
FROM Funcionarios AS F
JOIN Departamentos AS D ON F.id_depto = D.id_depto;

Vamos salvar isso como uma VIEW:

SQL

CREATE VIEW v_Funcionarios_Departamentos AS
SELECT
    F.nome_func,
    F.cargo,
    D.nome_depto
FROM
    Funcionarios AS F
JOIN
    Departamentos AS D ON F.id_depto = D.id_depto;

Agora, para obter os mesmos dados, basta fazer:

SQL

-- Consulta simples!
SELECT * FROM v_Funcionarios_Departamentos;

Caso de Uso 2: Implementando Segurança

Queremos criar uma lista telefônica que não mostre o salário.

SQL

CREATE VIEW v_Lista_Telefonica AS
SELECT
    nome_func AS Nome,
    cargo AS Cargo,
    nome_depto AS Departamento
FROM
    v_Funcionarios_Departamentos; -- Sim, VIEWs podem ser baseadas em outras VIEWs

Se um usuário tiver permissão apenas para v_Lista_Telefonica, ele nunca saberá que a coluna salario existe.

Como Gerenciar VIEWs

O gerenciamento de VIEWs é direto:

1. Alterar uma VIEW (ALTER VIEW ou CREATE OR REPLACE)

A forma mais segura de modificar uma VIEW sem precisar dar DROP nela primeiro é usando CREATE OR REPLACE VIEW:

SQL

CREATE OR REPLACE VIEW v_Lista_Telefonica AS
SELECT
    nome_func AS Nome,
    cargo AS Cargo
    -- Removemos o departamento da visão
FROM
    Funcionarios;

2. Excluir uma VIEW (DROP VIEW)

Isso remove apenas a VIEW (o “atalho”). Os dados nas tabelas originais (Funcionarios, Departamentos) permanecem intactos.

SQL

DROP VIEW v_Lista_Telefonica;

Limitações Importantes

VIEWs são poderosas, mas não são mágicas. Tenha em mente dois pontos:

  1. Performance: Uma VIEW não armazena os dados (no MySQL padrão). Se sua VIEW faz um JOIN em tabelas de milhões de linhas, essa consulta pesada será executada toda vez que você chamar a VIEW. Ela simplifica a escrita, não necessariamente o processamento.
  2. Atualizações (UPDATE/INSERT): É possível, em casos muito específicos (geralmente VIEWs baseadas em uma única tabela), fazer UPDATE ou INSERT através da VIEW, o que altera a tabela original. No entanto, isso é complexo e não é recomendado para VIEWs que envolvem JOINs ou agregações (GROUP BY). Trate VIEWs como ferramentas de leitura (SELECT).

Conclusão

VIEWs são uma ferramenta essencial em SQL. Elas limpam seu código, reduzem a repetição de JOINs complexos e fornecem uma camada de segurança robusta para controlar exatamente quais dados os usuários podem acessar.

Sair da versão mobile