Vistas en MySQL: cómo crear, modificar y eliminar
Aprende a crear, consultar, modificar y eliminar vistas en MySQL con ejemplos prácticos.
Actualizado el
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,UNIONy 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.