sql >> Base de Datos >  >> RDS >> Mysql

Vistas MySQL

Aquí, explico qué son las "vistas" de MySQL y cómo usarlas.

MySQL nos proporciona la capacidad de crear vistas . Una vista se define como una consulta almacenada que, cuando se invoca, produce un conjunto de resultados. Algunas personas se refieren a las vistas como "tablas virtuales".

¿Claro como el barro? Intentémoslo de nuevo.

¿Qué es una vista?

Una vista es una consulta que guarda en la base de datos. Luego puede ejecutarlo más tarde simplemente llamando a esa vista (en lugar de escribir la consulta nuevamente).

La vista puede consistir en una consulta compleja, pero presentará los resultados como si fuera una tabla. Por lo tanto, puede consultar la vista como si fuera una tabla.

Por ejemplo, podría tener una consulta compleja que seleccione datos de tres tablas diferentes. Puede escribir esta consulta compleja cada vez que necesite ejecutarla o puede guardar la consulta como una vista. Una vez que se ha guardado como una vista, puede ejecutar un simple SELECT declaración para devolver los resultados de la consulta compleja. Pero, por supuesto, también puede escribir una consulta compleja contra la vista si es necesario.

Crear una vista

La creación de vistas es muy sencilla. Simplemente precede su consulta con una línea de código y ejecútela. La vista se creará inmediatamente en su base de datos.

Sintaxis

Para crear una vista, escriba la siguiente declaración, seguida de la consulta:

CREATE VIEW view_name AS

Reemplazar view_name con cualquier nombre que le gustaría usar para la vista.

Ejemplo

Si ejecutamos el siguiente código contra FruitShop base de datos:

CREATE VIEW vFruitInventory AS
SELECT 
    Fruit.FruitName,
    Fruit.Inventory,
    Units.UnitName
FROM
	Fruit INNER JOIN Units ON
    Fruit.UnitId = Units.UnitId;

Ahora vemos una vista llamada vFruitInventory enumerados en Vistas (es posible que deba hacer clic en Actualizar botón para ESQUEMAS menú primero):

Es una buena idea pensar en una convención de nomenclatura para sus vistas (como con cualquier otro objeto de base de datos) y ceñirse a ella. Muchos desarrolladores anteponen sus nombres de vista con v , vw , v_ o vw_ para que sea más fácil distinguir las vistas de las tablas en sus consultas. Sin embargo, otros desarrolladores no están de acuerdo con esta convención y prefieren que los nombres de sus tablas y vistas sean intercambiables.

Consultar una vista

Ahora podemos consultar la vista como lo haríamos con una tabla:

SELECT * FROM vFruitInventory;

Resultado:

Por supuesto, también podemos usar una consulta más específica. Por ejemplo, este que selecciona solo aquellos registros donde el inventario es mayor o menor que 10:

SELECT FruitName 
FROM vFruitInventory
WHERE Inventory <= 10;

Pero no podemos columnas de consulta a las que no se hace referencia en la vista (incluso si están en las tablas subyacentes que consulta la vista).

Por ejemplo, podemos consultar la Fruit tabla como esta:

SELECT * 
FROM Fruit
WHERE FruitId = 1;

Pero no podemos consultar el vFruitInventory anterior. ver así:

SELECT * 
FROM vFruitInventory
WHERE FruitId = 1;

Esto se debe a que la vista no devuelve el FruitId columna. Especificamos las columnas exactas en la vista y esas son todas las que se devuelven. Como se mencionó, el conjunto de resultados de la vista es como una tabla y a algunos les gusta llamarlo "tabla virtual". Si la "tabla" no incluye esas columnas, no puede consultarlas.

En lugar de ser una limitación, en realidad es una característica de vistas Esta característica significa que podemos otorgar a los usuarios acceso a algunos columnas de una tabla pero no otras (a través de la vista). En otras palabras, podemos otorgar acceso a un usuario a una vista sin otorgarle acceso a las tablas subyacentes a las que accede la vista. Algunas tablas pueden almacenar información confidencial a la que el usuario no puede acceder. Pero las mismas tablas también pueden almacenar información no confidencial que necesitan acceder. ¿Qué hacer? ¡Crea una vista! Y esa vista puede seleccionar solo la información no confidencial de esas tablas.

Modificar una vista

Aquí hay dos métodos diferentes para modificar su vista.

Opción 1:Usar ALTER VIEW Declaración

Puede modificar una vista utilizando ALTER VIEW declaración. Así:

ALTER VIEW view_name AS

Reemplazar view_name con el nombre de la vista que desea modificar.

Ejemplo

Agreguemos el Fruit.FruitId campo a la vista:

ALTER VIEW vFruitInventory AS
SELECT 
	Fruit.FruitId,
    Fruit.FruitName,
    Fruit.Inventory,
    Units.UnitName
FROM
	Fruit INNER JOIN Units ON
    Fruit.UnitId = Units.UnitId;

Ahora, cuando intentamos devolver el FruitId campo en nuestras consultas obtendremos resultados.

Pero tenga en cuenta que no podemos intentar acceder a este campo como Fruit.FruitId . Solo podemos acceder a él como FruitId . Y así es como debe ser. Después de todo, la vista es una "tabla virtual" y no necesitamos conocer la estructura de las tablas que consulta.

Opción 2:Usar CREATE OR REPLACE

Tenga en cuenta que la vista debe existir antes de ejecutar ALTER VIEW declaración. Si no existe, recibirá un error. Puede evitar este problema usando un CREATE OR REPLACE declaración. Esto creará la vista si no existe, o la reemplazará si existe.

Así que podríamos haber creado la vista anterior como esta:

CREATE OR REPLACE VIEW vFruitInventory AS
SELECT 
    Fruit.FruitName,
    Fruit.Inventory,
    Units.UnitName
FROM
	Fruit INNER JOIN Units ON
    Fruit.UnitId = Units.UnitId;

Y luego podríamos actualizarlo usando el mismo CREATE OR REPLACE declaración, pero simplemente modificando la definición. Por ejemplo, agregando Fruit.FruitId campo:

CREATE OR REPLACE VIEW vFruitInventory AS
SELECT 
	Fruit.FruitId,
    Fruit.FruitName,
    Fruit.Inventory,
    Units.UnitName
FROM
	Fruit INNER JOIN Units ON
    Fruit.UnitId = Units.UnitId;

Soltar una vista

Puedes soltar una vista usando DROP VIEW declaración. Así:

DROP VIEW vFruitInventory

La declaración anterior eliminará la vista llamada vFruitInventory .

Dejar caer varias vistas

Puede soltar varias vistas usando el mismo DROP VIEW declaración. Simplemente separe cada nombre de vista con una coma. Así:

DROP VIEW view_1, view_2 ...

El IF EXISTS Cláusula

También puedes usar el IF EXISTS cláusula para evitar que ocurra un error si una vista no existe:

DROP VIEW IF EXISTS view_1, view_2 ...