Cómo crear y utilizar una vista en MySQL

GuíasBases de datosMySQLProgramacionSQL

Una vista almacena varias consultas que devuelven un conjunto de resultados, conformándose como una tabla. Las vistas funcionan exactamente igual que las tablas, por lo que en muchas ocasiones se hace referencia a ellas como tablas virtuales. En este artículo vamos a ver cómo crear y utilizar vistas MySQL.

¿Qué es una vista?

Una vista es una tabla virtual generada a partir de la ejecución de varias consultas sobre una o más tablas. Una vista tiene la misma estructura de filas y columnas que cualquier otra tabla MySQL, se almacenan del mismo modo y no es posible que existan dos con el mismo nombre.

Sintaxis de una vista

La sintaxis de una vista es la siguiente:

CREATE [OR REPLACE] VIEW nombre_vista [lista_columnas]
AS consulta

Si observas la sintaxis verás varios apartados:

  • nombre_vista: Representa el nombre de la tabla virtual que tendrá la vista.
  • lista_columnas: Es el listado de columnas que creará la vista.
  • consulta: Se trata de una consulta SELECT que nos devolvuelven los datos que forman de la vista.

También podemos ver el modificador opcional OR REPLACE. Cuando se crea una vista con OR REPLACE, se creará la vista si no existe una con el mismo nombre y, si existe, se reemplazará por ésta.

Ventajas de utilizar una vista

La mayor ventaja de utilizar vistas se obtiene en forma de rendimiento, ya que no estaremos generando constantemente una vista si ésta ya existe. Cuanto más complejas sean las consultas que se deben ejecutar para obtener la vista, mayor será la ganancia de rendimiento. Por otro lado, también puede suponer una ventaja en términos de seguridad si no queremos que los usuarios puedan obtener datos de las tablas originales sobre las que se crea la vista.

También podemos limitar los permisos de acceso a una vista a ciertos usuarios. Una vista, en general, puede ayudarte a construir una interfaz simplificada y abstracta a una base de datos compleja.

Configuración de la base de datos

Vamos a crear una base de datos de ejemplo sobre la cual crearemos una vista en el siguiente apartado. En este caso usamos la línea de comandos para tal fin, pero también puedes crear la base de datos MySQL mediante otros métodos.

Para crear una base de datos mediante la línea de comandos, conéctate a MySQL, reemplazando usuario por tu nombre de usuario.

mysql -u usuario -p

La base de datos se llamará base_ejemplo. Ejecuta estas sentencias para crearla:

  1. Crea la base de datos con la sentencia CREATE:
    CREATE DATABASE base_ejemplo;
  2. Ahora selecciona la base de datos para poder ejecutar sentencias SQL sobre ella:
    USE base_ejemplo;

    En caso de utilizar phpMyAdmin, simplemente haz clic en el nombre de la base de datos.

  3. Vamos a crear una tabla a la que llamaremos productos:
    CREATE TABLE productos (
        id INT NOT NULL AUTO_INCREMENT,
        nombre VARCHAR(20) NOT NULL,
        estado VARCHAR(20) NOT NULL DEFAULT 'disponible',
        precio FLOAT NOT NULL DEFAULT 0.0,
        PRIMARY KEY(id)
    );
  4. Finalmente, insertamos algunos datos de prueba en la tabla productos:
    INSERT INTO productos (nombre, estado, precio) VALUES ('Producto A','disponible', 8), ('Producto B', 'disponible', 1.5),('Producto C', 'agotado', 80);

Ya tenemos al base de datos creada. En el siguiente apartado vamos a crear una vista sobre esta base de datos.

Cómo crear una vista

Ahora que ya hemos creado una base de datos con una tabla, vamos a crear una vista sencilla. En concreto, vamos a crear una vista llamada vistaProductosBaratos que devolverá aquellos productos con un coste inferior a 10 unidades.

Para crear la vista debes utilizar la sentencia CREATE:

CREATE VIEW vistaProductosBarato AS SELECT nombre FROM productos WHERE precio < 10.00;

Una vez se ejecute la consulta, podrás ver una tabla adicional en el listado de tablas de la base de datos.

Cómo utilizar la vista

Cuando crees una vista, podrás ejecutar consultas sobre ella como si de una tabla más se tratase. Por ejemplo, vamos a seleccionar todos los datos de la vista vistaProductosBaratos de nuestro ejemplo:

SELECT * FROM vistaProductosBarato;

La consulta anterior devolverá los siguientes resultados:

+------------+
| nombre     |
+------------+
| Producto A |
| Producto B |
+------------+

Obviamente, la vista que hemos creado no nos otorga ninguna ventaja en cuanto a rendimiento se refiere, ya que ésta debería estar creada en base a varias tablas, con consultas más complejas, pero sirve para ilustrar su utilidad.

Cómo borrar una vista

Puedes eliminar una vista haciendo uso de la sentencia DROP VIEW. Por ejemplo, si quieres eliminar la vista vistaProductosBarato del ejemplo anterior, tendrás que ejecutar esta sentencia:

DROP VIEW vistaProductosBarato;

Esto ha sido todo. Para más información acerca de las vistas, puedes consultar la documentación oficial de MySQL.