Saltar al contenido

Mentoring

Vistas en MySQL: cómo crear, modificar y eliminar

Aprende a crear, consultar, modificar y eliminar vistas en MySQL con ejemplos prácticos.

Mentoring 3 min de lectura

Actualizado el

Vistas en MySQL

Una vista en MySQL es una definición SELECT guardada con un nombre. No almacena por sí misma una copia independiente de las filas: al consultarla, los datos se obtienen de las tablas y columnas originales, de las que depende.

La definición de una vista parte de una consulta; si necesitas repasar filtros, joins o agrupaciones, consulta la guía de SELECT en MySQL.

Crear una vista

CREATE VIEW nombre_vista AS
SELECT columnas
FROM tabla
WHERE condicion;

Ejemplo:

CREATE VIEW clientes_activos AS
SELECT id, nombre, email
FROM clientes
WHERE activo = 1;

Después puedes consultar la vista así:

SELECT * FROM clientes_activos;

Crear una vista con JOIN

CREATE VIEW resumen_pedidos AS
SELECT
  c.nombre AS cliente,
  COUNT(p.id) AS total_pedidos,
  SUM(p.total) AS importe_total
FROM clientes c
JOIN pedidos p ON p.cliente_id = c.id
GROUP BY c.id, c.nombre;

Esta vista resume cuántos pedidos tiene cada cliente y el importe total. Al incluir COUNT, SUM y GROUP BY, está orientada a lectura y no es actualizable directamente.

Reemplazar una vista existente

CREATE OR REPLACE VIEW clientes_activos AS
SELECT id, nombre, email, fecha_alta
FROM clientes
WHERE activo = 1;

CREATE OR REPLACE reemplaza la definición existente si la vista ya existe. MySQL 8.4 no admite CREATE VIEW IF NOT EXISTS.

Modificar una vista con ALTER VIEW

ALTER VIEW clientes_activos AS
SELECT id, nombre, email
FROM clientes
WHERE activo = 1 AND email IS NOT NULL;

ALTER VIEW modifica la definición de la vista manteniendo su nombre.

Eliminar una vista

DROP VIEW clientes_activos;

Para evitar error si no existe:

DROP VIEW IF EXISTS clientes_activos;

También puedes eliminar varias vistas en una sola sentencia:

DROP VIEW vista_clientes, vista_pedidos;

Desde MySQL 8.4, la eliminación múltiple es atómica respecto de vistas ausentes: si alguna de las vistas indicadas no existe, no se elimina ninguna.

Cuándo usar vistas

Las vistas son útiles para:

  • Reutilizar consultas frecuentes.
  • Encapsular joins y agregaciones de lectura.
  • Exponer solo un subconjunto de columnas o filas.
  • Dar una interfaz más estable a informes o consultas de lectura.

No las plantees como sustituto de permisos o de un buen diseño de tablas.

Limitaciones y dependencias

  • Una vista en MySQL no guarda datos por sí misma ni tiene índices propios: se optimizan las tablas base.
  • Una vista puede implicar hasta 61 tablas.
  • No admite parámetros, tablas temporales ni triggers propios.
  • No todas son actualizables: agregados, DISTINCT, GROUP BY, HAVING, UNION y otros constructores pueden impedirlo.
  • Cambiar o eliminar columnas o tablas base puede invalidar la definición o hacer fallar las consultas.
  • El rendimiento depende de la consulta y de los índices de las tablas originales.

Usa las vistas de MySQL para simplificar lecturas, no como sustituto de un buen diseño de tablas e índices.

Preguntas frecuentes

¿Cómo listar las vistas de una base de datos?

Usa SHOW FULL TABLES y filtra por VIEW; solo aparecerán las vistas visibles para tus permisos:

SHOW FULL TABLES FROM nombre_base WHERE Table_type = 'VIEW';

Para consultar metadatos como VIEW_DEFINITION, usa INFORMATION_SCHEMA.VIEWS; para obtener la sentencia DDL completa de una vista, usa SHOW CREATE VIEW nombre_vista.