Buscar..


Sintaxis

  • CREATE VIEW view_name AS SELECT column_name (s) FROM table_name WHERE condición; /// Sintaxis de crear simple vista

  • CREAR [O REEMPLAZAR] [ALGORITMO = {NO DEFINIDO | MERGE | TEMPTABLE}] [DEFINER = {usuario | CURRENT_USER}] [SQL SECURITY {DEFINER | INVOKER}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] OPCIÓN DE VERIFICACIÓN]; /// Sintaxis de la vista de crear completa

  • DROP VIEW [IF EXISTS] [db_name.] View_name; /// Sintaxis de vista de caída

Parámetros

Parámetros Detalles
nombre_vista Nombre de la vista
Instrucción SELECT Sentencias SQL para ser empaquetadas en las vistas. Puede ser una instrucción SELECT para obtener datos de una o más tablas.

Observaciones

Las vistas son tablas virtuales y no contienen los datos que se devuelven. Pueden evitar que escriba consultas complejas una y otra vez.

  • Antes de realizar una vista, su especificación consiste completamente en una instrucción SELECT . La instrucción SELECT no puede contener una subconsulta en la cláusula FROM.
  • Una vez que se hace una vista , se usa en gran parte como una tabla y se puede SELECT desde una tabla.

Debe crear vistas, cuando desee restringir algunas columnas de su tabla, desde el otro usuario.

  • Por ejemplo: en su organización, desea que sus gerentes vean poca información de una tabla llamada "Ventas", pero no desea que sus ingenieros de software puedan ver todos los campos de la tabla "Ventas". Aquí, puede crear dos vistas diferentes para sus gerentes y sus ingenieros de software.

Rendimiento VIEWs son azúcar sintáctica. Sin embargo, el rendimiento puede o no ser peor que la consulta equivalente con la selección de la vista plegada. El Optimizador intenta hacer esta "plegada" por usted, pero no siempre es exitoso. MySQL 5.7.6 proporciona algunas mejoras más en el Optimizador. Pero, independientemente, el uso de VIEW no generará una consulta más rápida .

Crear una vista

Privilegios

La sentencia CREATE VIEW requiere el privilegio CREATE VIEW para la vista y algún privilegio para cada columna seleccionada por la sentencia SELECT. Para las columnas utilizadas en otros lugares de la instrucción SELECT, debe tener el privilegio SELECT. Si la cláusula OR REPLACE está presente, también debe tener el privilegio DROP para la vista. CREATE VIEW también puede requerir el privilegio SUPER, según el valor DEFINER, como se describe más adelante en esta sección.

Cuando se hace referencia a una vista, se produce la comprobación de privilegios.

Una vista pertenece a una base de datos. De forma predeterminada, se crea una nueva vista en la base de datos predeterminada. Para crear la vista explícitamente en una base de datos determinada, use un nombre completo

Por ejemplo:

db_name.view_name

mysql> CREATE VIEW test.v AS SELECT * FROM t;

Nota: dentro de una base de datos, las tablas base y las vistas comparten el mismo espacio de nombres, por lo que una tabla base y una vista no pueden tener el mismo nombre.

Una vista puede:

  • Ser creado a partir de muchos tipos de declaraciones SELECT
  • Consulte las tablas base u otras vistas.
  • usar uniones, UNION, y subconsultas
  • SELECT no necesita referirse a ninguna tabla

Otro ejemplo

El siguiente ejemplo define una vista que selecciona dos columnas de otra tabla, así como una expresión calculada a partir de esas columnas:

mysql> CREATE TABLE t (qty INT, price INT);
mysql> INSERT INTO t VALUES(3, 50);
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
mysql> SELECT * FROM v;
+------+-------+-------+
| qty  | price | value |
+------+-------+-------+
|    3 |    50 |   150 |
+------+-------+-------+

Restricciones

  • Antes de MySQL 5.7.7, la instrucción SELECT no puede contener una subconsulta en la cláusula FROM.
  • La instrucción SELECT no puede referirse a variables del sistema o variables definidas por el usuario.
  • Dentro de un programa almacenado, la instrucción SELECT no puede referirse a parámetros de programa o variables locales.
  • La instrucción SELECT no puede referirse a parámetros de declaración preparados.
  • Cualquier tabla o vista referida en la definición debe existir. Una vez creada la vista, es posible eliminar una tabla o vista que
    la definición se refiere a En este caso, el uso de la vista produce un error. Para verificar una definición de vista para problemas de este tipo, use la sentencia CHECK TABLE.
  • La definición no puede referirse a una tabla TEMPORAL, y usted no puede
    crear una vista temporal.
  • No puede asociar un disparador con una vista.
  • Los alias para los nombres de columna en la instrucción SELECT se comparan con la longitud máxima de columna de 64 caracteres (no el alias máximo)
    longitud de 256 caracteres).
  • Una VIEW puede o no optimizarse, así como el SELECT equivalente. Es poco probable que se optimice mejor.

Una vista desde dos mesas.

Una vista es más útil cuando se puede utilizar para extraer datos de más de una tabla.

CREATE VIEW myview AS
SELECT a.*, b.extra_data FROM main_table a 
LEFT OUTER JOIN other_table b 
ON a.id = b.id

En mysql las vistas no se materializan. Si ahora realiza la consulta simple SELECT * FROM myview , mysql realmente realizará la SELECT * FROM myview IZQUIERDA detrás de la escena.

Una vista una vez creada se puede unir a otras vistas o tablas

Actualización de una tabla a través de una vista

A VIEW parece mucho a una mesa. Aunque puede UPDATE una tabla, es posible que no pueda actualizar una vista en esa tabla. En general, si el SELECT en la vista es lo suficientemente complejo como para requerir una tabla temporal, no se permite UPDATE .

Cosas como GROUP BY , UNION , HAVING , DISTINCT y algunas subconsultas impiden que la vista sea actualizable. Detalles en el manual de referencia .

DROPPING A VIEW

- Crear y soltar una vista en la base de datos actual.

CREATE VIEW few_rows_from_t1 AS SELECT * FROM t1 LIMIT 10;
DROP VIEW few_rows_from_t1;

- Cree y suelte una vista que haga referencia a una tabla en una base de datos diferente.

CREATE VIEW table_from_other_db AS SELECT x FROM db1.foo WHERE x IS NOT NULL;
DROP VIEW table_from_other_db;


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow