DROP VIEW

DROP VIEW elimina una o más vistas de la base de datos. Al eliminar una vista solo se elimina la definición de la consulta; las tablas subyacentes y sus datos no se ven afectados.

Sintaxis

-- Eliminar una vista
DROP VIEW nombre_vista;
 
-- Eliminar si existe (evita error)
DROP VIEW IF EXISTS nombre_vista;
 
-- Eliminar múltiples vistas
DROP VIEW IF EXISTS vista1, vista2, vista3;

Ejemplo básico

-- Crear una vista
CREATE VIEW v_test AS
SELECT nombre, precio FROM productos WHERE precio > 1000;
 
-- Verificar que existe
SELECT * FROM v_test;
nombreprecio
iPhone 15 Pro1299.99
MacBook Air M31399.00
Lenovo ThinkPad X11549.00
ASUS ROG Zephyrus1899.99
-- Eliminar la vista
DROP VIEW v_test;
 
-- Intentar usarla genera un error
-- SELECT * FROM v_test;
-- Error: Table 'tienda_mysql.v_test' doesn't exist

IF EXISTS

IF EXISTS evita un error si la vista no existe:

-- Sin IF EXISTS: error si no existe
-- DROP VIEW v_inexistente;
-- Error: Unknown table 'tienda_mysql.v_inexistente'
 
-- Con IF EXISTS: solo una advertencia
DROP VIEW IF EXISTS v_inexistente;
-- Query OK, 0 rows affected, 1 warning
 
SHOW WARNINGS;
LevelCodeMessage
Note1051Unknown table 'tienda_mysql.v_inexistente'

Eliminar múltiples vistas

CREATE VIEW v_a AS SELECT nombre FROM productos LIMIT 5;
CREATE VIEW v_b AS SELECT nombre FROM clientes LIMIT 5;
CREATE VIEW v_c AS SELECT nombre FROM empleados LIMIT 5;
 
-- Eliminar todas a la vez
DROP VIEW IF EXISTS v_a, v_b, v_c;

Dependencias entre vistas

Si una vista depende de otra y eliminas la vista base, la vista dependiente no se elimina pero deja de funcionar:

-- Vista base
CREATE VIEW v_base AS
SELECT id, nombre, precio FROM productos WHERE activo = TRUE;
 
-- Vista que depende de v_base
CREATE VIEW v_derivada AS
SELECT nombre, precio FROM v_base WHERE precio > 500;
 
-- Funciona
SELECT * FROM v_derivada LIMIT 3;
nombreprecio
iPhone 15 Pro1299.99
Samsung Galaxy S24899.99
Google Pixel 8699.00
-- Eliminar la vista base
DROP VIEW v_base;
 
-- La vista derivada sigue existiendo pero falla
-- SELECT * FROM v_derivada;
-- Error: View references invalid table(s) or column(s)

Para evitar este problema, elimina las vistas dependientes primero:

DROP VIEW IF EXISTS v_derivada;
DROP VIEW IF EXISTS v_base;

Encontrar vistas en la base de datos

Antes de eliminar, puedes listar todas las vistas:

-- Listar todas las vistas
SELECT TABLE_NAME
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = 'tienda_mysql';
-- También con SHOW TABLES
SHOW FULL TABLES WHERE Table_type = 'VIEW';

Vista vs tabla al eliminar

ComandoElimina datosElimina estructura
DROP TABLE
DROP VIEWNo hay datosSolo la definición de la consulta

DROP VIEW es seguro: nunca elimina datos reales. Los datos están en las tablas subyacentes, que no se ven afectadas.

Limpieza

DROP VIEW IF EXISTS v_derivada;
DROP VIEW IF EXISTS v_base;

Con esto completamos la sección de vistas. Hemos cubierto cómo crear, actualizar, renombrar y eliminar vistas, los algoritmos de procesamiento y la cláusula WITH CHECK OPTION. En la siguiente sección exploraremos los procedimientos almacenados en MySQL.

Escrito por Eduardo Lázaro