Diferencia entre revisiones de «Mysql Vistas»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 52: Línea 52:
 
:* Podéis consultar para que sirve la cláusula ALGORITHM [https://dev.mysql.com/doc/refman/5.7/en/view-algorithms.html en este enlace].
 
:* Podéis consultar para que sirve la cláusula ALGORITHM [https://dev.mysql.com/doc/refman/5.7/en/view-algorithms.html en este enlace].
  
 +
:* La cláusula 'WITH CHECK OPTION' hace referencia a que si se utiliza, sólo se podrán actualizar o insertar registros que cumplan las condiciones establecidas en la vista (la cláusula WHERE de la vista).
  
  
Línea 60: Línea 61:
 
  SELECT col
 
  SELECT col
 
  FROM TABLA;
 
  FROM TABLA;
−
</syntaxhighlight
+
</syntaxhighlight>
  
 
* Si no indicamos el nombre de las columnas, cada columna de la vista tendrá el mismo nombre que las columnas del SELECT.
 
* Si no indicamos el nombre de las columnas, cada columna de la vista tendrá el mismo nombre que las columnas del SELECT.

Revisión del 18:27 1 abr 2018

Introducción

  • Una vista es una tabla 'virtual' formada a partir de las tablas reales de una base de datos.
  • Recordar que cuando vimos los diferentes visiones de representación de una base de datos (física, conceptual y externas), las vistas se corresponden al las visiones externas.


  • Una vista se forma a partir de una o varias tablas.
La vista tendrá un nombre asociado y una serie de columnas a partir de las columnas de las tablas reales subyacentes.


  • Las vistas pueden ser utilizadas:
  • Como mecanismo de seguridad ya que los usuarios no tienen acceso directo a las tablas de la base de datos.
  • Como una forma de simplificar el acceso a las datos de la base de datos, ya que podemos tener vistas formadas por los JOINS de diferentes tablas.
Esto al usuario le será transparente y sólo verá una tabla con los datos que necesita obtener.


  • Al igual que sucede con las tablas podemos 'proteger' el acceso a las vistas y a las diferentes operaciones sobre ella (SELECT, UPDATE, INSERT y DELETE).


  • Una vista puede estar formada por tablas, otras vistas, subconsultas y joins.


  • Podemos realizar operaciones sobre las vistas que 'afecten' a las tablas que conforman la vista, pero con las siguientes limitaciones:
  • No se pueden utilizar tablas temporales.
  • No usar cláusulas GROUP BY o HAVING.
  • No usar joins externos (LEFT JOIN / RIGHT JOIN)
  • No usar subconsultas correlacionadas.
  • En el caso de utilizar cláusulas JOIN se podrán actualizar o insertar en las tablas siempre que los datos a modificar/insertar hagan referencia a una única tabla.
  • Tiene que haber una relación 1 a 1 entre el registro de la vista a actualizar y el registro de la tabla relacionada.
  • Si una vista hace referencia a columnas derivadas, no se podrá añadir una fila, pero sí se podrá actualizar siempre que se referencien a las columnas que no son derivadas.
  • Si se añade una fila se tendrán que referenciar al menos todas las columnas de la tabla que no tengan un valor por defecto.


  • Una vista no puede ser 'asociada' a un trigger.
Tenéis más limitaciones en el enlace del CREATE VIEW puesto anteriormente.



Creación de una vista

  • Para poder crear una vista necesitamos tener el permiso CREATE VIEW y el permiso SELECT sobre las columnas que conforman la vista.
  • Si queremos utilizar la opción CREATE OR REPLACE necesitaremos también el permiso DROP.


  • Aunque no vimos esta opción (también está en los procedimientos almacenados), la cláusula SECURITY puede ser utilizada para indicar que la vista se ejecute con los permisos de quien la utiliza (opción INVOKER) o que sea ejecutada con los permisos de quién creó la vista (opción DEFINER).
  • Podéis consultar para que sirve la cláusula ALGORITHM en este enlace.
  • La cláusula 'WITH CHECK OPTION' hace referencia a que si se utiliza, sólo se podrán actualizar o insertar registros que cumplan las condiciones establecidas en la vista (la cláusula WHERE de la vista).


  • La forma más sencilla de crear una vista sería:
1 CREATE VIEW miVista
2 AS
3  SELECT col
4  FROM TABLA;
  • Si no indicamos el nombre de las columnas, cada columna de la vista tendrá el mismo nombre que las columnas del SELECT.







-- Ángel D. Fernández González -- (2017).