La creación de vistas en MySQL es una herramienta poderosa que permite generar información dinámica a partir de datos almacenados en nuestras tablas. Estas estructuras virtuales nos ayudan a simplificar consultas complejas y a mantener una organización eficiente de nuestros datos, especialmente cuando necesitamos acceder frecuentemente a información procesada o agregada.
¿Qué son las vistas y por qué son importantes?
Las vistas (views) o tablas virtuales son estructuras que almacenan de manera virtual la información que agrupamos de diferentes formas, quedando disponibles como tablas que podemos consultar puntualmente. A diferencia de las tablas físicas, las vistas no almacenan datos por sí mismas, sino que ejecutan una consulta predefinida cada vez que accedemos a ellas.
Las vistas ofrecen múltiples ventajas:
Simplifican consultas complejas: Permiten encapsular lógica de negocio compleja en una estructura simple.
Mejoran la seguridad: Pueden limitar el acceso a ciertos datos sin exponer la estructura completa de la base de datos.
Facilitan el mantenimiento: Centralizan la lógica de consulta en un solo lugar.
Optimizan el rendimiento: Evitan tener que reescribir consultas complejas repetidamente.
Columnas generadas: el primer paso hacia la virtualización
Antes de adentrarnos en las vistas, es importante entender el concepto de columnas generadas. Estas son columnas virtuales que se calculan a partir de otras columnas en la misma tabla.
Por ejemplo, en nuestra tabla build_products, podemos agregar una columna generada que calcule el total de cada producto:
ALTERTABLE build_products
ADDCOLUMN total FLOATAS(price * quantity *(1- discount/100))AFTER discount;
Esta columna total se calcula automáticamente multiplicando el precio por la cantidad y aplicando el descuento correspondiente. El descuento se almacena como un valor entre 0 y 100, por lo que debemos dividirlo por 100 para obtener el porcentaje correcto.
Podemos verificar que la columna se ha creado correctamente:
SELECT product_id, quantity, price, discount, total
FROM build_products
LIMIT10;
¿Cómo crear vistas efectivas en MySQL?
Para crear una vista en MySQL, utilizamos la sintaxis CREATE VIEW nombre_vista AS consulta. La consulta puede ser tan simple o compleja como necesitemos, incluyendo funciones de agregación, joins, filtros, etc.
Veamos un ejemplo práctico. Supongamos que queremos crear un reporte diario de ventas que incluya:
Ahora podemos consultar esta vista como si fuera una tabla normal:
SELECT*FROM ventas_diarias;
Lo más importante es que esta vista es dinámica: cada vez que se modifica un valor en la tabla original, los cambios se reflejan automáticamente en la vista, ya que los cálculos se realizan en el momento de la consulta.
¿Qué más podemos hacer con las vistas?
Las vistas no solo nos permiten simplificar consultas complejas, sino que también podemos realizar consultas sobre ellas:
SELECT*FROM ventas_diarias
WHERE fecha ='2025-02-24';
Esta flexibilidad nos permite construir capas de abstracción sobre nuestros datos, facilitando el análisis y la generación de reportes.
Vistas materializadas: una alternativa a considerar
Es importante mencionar que MySQL no tiene soporte nativo para vistas materializadas (vistas que almacenan físicamente los resultados de la consulta). Sin embargo, existen formas de emular este comportamiento utilizando tablas temporales y triggers, que son funciones que se ejecutan automáticamente en respuesta a eventos como inserciones, actualizaciones o eliminaciones en una tabla.
Los triggers son un tema avanzado que permite automatizar acciones en nuestra base de datos, y son una herramienta fundamental para implementar lógica de negocio compleja directamente en la capa de datos.
Las vistas en MySQL son una herramienta poderosa que nos permite organizar y acceder a nuestros datos de manera eficiente. Al combinarlas con columnas generadas y funciones de agregación, podemos crear reportes dinámicos que se actualizan automáticamente con los cambios en nuestros datos. ¿Has utilizado vistas en tus proyectos? ¿Qué otros casos de uso encuentras para esta funcionalidad? Comparte tu experiencia en los comentarios.
Profe me encanta su forma de explicar, creo que usted y JuanDC son los mejores profes que platzi podría tener, pero vengo del curso anterior y no recuerdo que hayamos creado una columna de date_added en la tabla de bill_products, en qué momento se creó ésta columna y con qué datos? hay alguna fórmula de por medio en dicha columna?
No tienes idea cuánto te lo agradezco! En serio!
No me acuerdo ahorita si quedó en un video o no, pero si la lógica no me falla, debería ser date_added datetime not null default current_timestamp.
Conceptos Clave de Vistas en MySQL
Definición de Vistas: Son tablas virtuales que almacenan consultas complejas. No guardan datos físicamente, sino que ejecutan el query cada vez que las consultas.
Utilidad: Permiten simplificar reportes, organizar datos agregados y mantener consultas dinámicas siempre disponibles sin repetir código.
Funcionalidades Técnicas
Columnas Generadas: Permiten crear campos calculados (ej. totales) directamente en la tabla, optimizando el acceso a datos derivados.
Funciones de Agregación: Herramientas como COUNT, SUM, AVG y MAX son esenciales para resumir información en las vistas.
Consultas sobre Consultas: Una vez creada la vista, puedes tratarla como una tabla normal, permitiendo filtrar o manipular sus resultados con nuevos queries.
Buenas Prácticas
Desnormalización Estratégica: Almacenar datos como el precio en el momento de la venta protege la integridad histórica de tus reportes frente a cambios futuros en los catálogos.
Dinamismo: Al ser virtuales, cualquier cambio en los datos base se refleja automáticamente en la vista al consultarla.
Podrian orientarme por favor, quisiera saber si count(bill_product_id) pertenece a las ventas del dia tipo como facturas generadas o si estoy mal me podrian corregir, gracias
Víctor, el count es la clave primaria “surrogada” de la tabla de detalle de facturas; un identificador único autoincremental para cada fila de bill_products, distinto de bill_id y product_id, que suelen actuar como llaves foráneas hacia la factura y el producto, respectivamente. Básicamente, la cantidad de movimientos que hubo en la fecha, por ejemplo fíjate que en el group by, la tabla que muestro arriba, son 4 movimientos los que hubo el 9 de marzo del 2025, y si haces una consulta filtrando esa fecha, mira que la tabla reporta el detalle de esos 4 movimientos:
Es recomendable desnormalizar para guardar el historial.
📌 ¿Qué son las vistas (views)? - Copilot
Son tablas virtuales que no almacenan datos, sino que muestran el resultado de una consulta guardada.
Se usan para simplificar consultas complejas, centralizar lógica y mejorar la seguridad de acceso a los datos.
🔧 Ventajas de usar vistas
Encapsulan lógica compleja, haciéndola más accesible.
Restringen columnas o registros, protegiendo la información.
Reflejan los cambios en tiempo real: siempre que cambia la tabla base, cambia la vista.
Se puede unir (JOIN) con otras vistas o tablas para sumar más contexto.
🏗️ Cómo crear una vista
-Convertir la consulta en una vista:
CREATE VIEW clientsCountry AS
SELECT
client_id,
first_name,
last_name,
email,
city
FROM clients
WHERE city = 'AR';
-Se puede consultar así:
SELECT * FROM clientsCountry;
🧱 ¿Y las vistas materializadas?
MySQL no las soporta nativamente.
Pero se pueden simular con tablas temporales y triggers para almacenar resultados si es necesario.
Como no tengo la columna date_added intenté ejecutar el query con created_at, pero la lógica del query se ve fuertemente comprometida ya que creado_en solo guarda el timestamp de cuando inserté los registros, y pues inserté todos al tiempo jaja, entonces por eso no sirve.