Visões no MySQL: Conceitos e Aplicações Práticas

Uma visão (view) é um resultado virtual gerado por uma consulta SELECT. Ao criá-la, o foco principal está em definir corretamente a instrução SQL que produzirá os dados desejados.

Características das Visões

Visões não armazenam dados fisicamente — são apenas representações lógicas de consultas executadas sobre tabelas reais. Quando os dados nas tabelas base mudam, a visão reflete automaticamente essas alterações. Embora seja possível realizar operações de INSERT, UPDATE e DELETE em algumas visões, elas estão sujeitas a restrições específicas.

Vantagens do Uso de Visões

  • Simplificam consultas complexas, melhorando a legibilidade do código SQL.
  • Aumentam a segurança: permitem conceder acesso controlado a colunas ou linhas específicas, mesmo quando as permissões diretas do banco não oferecem esse nível de granularidade.

Cenários Comuns de Utilização

  • Ocultar colunas sensíveis, como salários ou dados pessoais, de usuários comuns.
  • Consolidar informações provenientes de múltiplas tabelas relacionadas, facilitando o acesso a dados agregados sem repetir joins complexos.

Exemplo 1: Criando e Consultando uma Visão

Suponha três tabelas: usuarios, cursos e matriculas. Para listar todos os cursos de um usuário específico, normalmente seria necessário um JOIN triplo:

SELECT
    m.id AS matricula_id,
    u.nome AS aluno,
    c.nome AS disciplina
FROM
    usuarios u
LEFT JOIN matriculas m ON u.id = m.usuario_id
LEFT JOIN cursos c ON m.curso_id = c.id
WHERE
    u.nome = 'João Silva';

Podemos encapsular essa lógica em uma visão chamada v_matriculas_alunos:

CREATE OR REPLACE VIEW v_matriculas_alunos AS
SELECT
    m.id AS matricula_id,
    u.nome AS aluno,
    c.nome AS disciplina
FROM
    usuarios u
JOIN matriculas m ON u.id = m.usuario_id
JOIN cursos c ON m.curso_id = c.id;

Agora, a consulat se torna simples e intuitiva:

SELECT aluno, disciplina
FROM v_matriculas_alunos
WHERE aluno = 'João Silva';

Exemplo 2: Operações de Modificação em Visões

Tentar atualizar campos de múltiplas tabelas simultaneamente via visão resultará em erro:

UPDATE v_matriculas_alunos 
SET aluno = 'Carlos', disciplina = 'Python'
WHERE matricula_id = 5;
-- ERRO: Não é permitido modificar mais de uma tabela base.

No entanto, modificações são possíveis em cenários mais restritos:

Caso 1: Visão de Tabela Única

Crie uma visão simplificada apenas da tabela usuarios:

CREATE VIEW v_usuarios_basico AS
SELECT id, login, nome
FROM usuarios;

Agora, operações CRUD funcionam normalmente (desde que colunas obrigatórias não estejam ausentes):

INSERT INTO v_usuarios_basico (login, nome) VALUES ('novo_user', 'Novo Usuário');
UPDATE v_usuarios_basico SET nome = 'Nome Atualizado' WHERE id = 1;
DELETE FROM v_usuarios_basico WHERE nome = 'Novo Usuário';

Caso 2: Visão com Relacionamento — Modificação Parcial

Atualizações em uma única tabela base podem ser permitidas:

UPDATE v_matriculas_alunos 
SET disciplina = 'Banco de Dados' 
WHERE matricula_id = 2;

UPDATE v_matriculas_alunos 
SET aluno = 'Maria Oliveira' 
WHERE matricula_id = 3;

Mas operações como INSERT ou DELETE ainda falham, pois envolvem ambiguidade sobre onde persistir os dados.

Dicas Finais

  • Otimize sempre as consultas subjacentes às visões — elas impactam diretamente o desempenho.
  • Modificações em visões podem afetar várias linhas nas tabelas reais; revise cuidadosamente antes de executar.

Tags: MySQL Views SQL

Publicado em 8-27 18:42