Está en la página 1de 13

Capitulo12.

Administrar Vistas E Índices Y


Lenguaje De Control De transacciones.

URDIANA GUTIERREZ JORGE ALEJANDRO


GRUPO: 5701
MATERIA: ADMINISTRACIÓN DE BASE DE
DATOS
PROFESOR: ABRAHAM JORGE JIMENEZ
ALFARO

4-3-2019
INTRODUCCIÓN
Dentro del lenguaje SQL se encuentra la categoría de sentencias que conforman el lenguaje de control de
transacciones.

Las sentencias del lenguaje de control de transacciones se utilizan para confirmar o restaurar transacciones de
base de datos, que son unidades de trabajo que realizan un o más sentencias en SQL.

Como ejemplos característicos tenemos los comandos COMMIT, ROLLBACK, SAVEPOINT, y SET TRANSACTION.

DESARROLLO
VISTAS
Una vista es una tabla virtual cuyo contenido está definido por una consulta. Al igual que en un tabla real, la vista
consta de un conjunto de columnas y filas de datos con un nombre.

Las filas y las columnas de datos proceden de tablas a las que se hace referencia a la vista. Una vista actúa como
un filtro de las tablas subyacentes las que se hace referencia en ella. Asimismo, es posible utilizar las consultas
distribuidas para definir vistas que utilicen datos de orígenes diversos. Esto puede resultar de utilidad, por
ejemplo, si uno de los datos de estructura similar que proceden de distintos servidores, cada uno de los cuales
almacena los datos para una región distinta de la organización.

La vistas permiten que varios usuarios puedan ver los datos de modo distinto, aunque estén utilizando los mismos
simultáneamente. Por ejemplo, es posible crear un vista que recupere únicamente los datos para los clientes con
los que trabaja el responsable comercial de una cuenta.

CRECIÓN DE UNA VISTA


Para crear una vista se utiliza la sentencia CREATE VIEW. Esta sentencia asigna un nombre a la vista y especifica
la consulta que la define.

La sentencia CREATE VIEW puede asignar opcionalmente un nombre a cada columna en la vista recién creada. Si
se especifica una lista de nombres de columnas, deberá tener el mismo número de columnas producido por la
consulta.

Si la lista de nombres de nombres de las columnas se omite en la sentencia CREATE VIEW, cada columna de la
vista adopta el nombre de las columnas correspondiente de la consulta.

La sintaxis de la sentencia es bastante sencilla y se representa a continuación:


AS indica las acciones que va a llevar acabo la vista. El parametro instrucción_selección es la instrucción SELECT
que define la vista.

Una vista se puede crear con mas de una tabla o con otras vistas, mediante una clausula SELECT de cualquier
complejidad.

Hay unas cuantas restricciones en las clausulas SELECT en una definicion de vista por ejemplo, una instrucción
CREATE VIEW no puede incluir clausulas COMPUTE o COMPUTE BY, ni incluir la clausula ORDER BY almenos que
solo haya una clausula TOP en l lista de selección de la instrucción SELECT.

WITH CHECK OPTION exige que todas las instrucciones de modificación de datos ejecutadas contra la vista se
adhieran a los criterios establecidos en SELECT_statement.

Una vista solo se puede crear en la base de datos actual y puede hacer referencia a un maximo de 1.024 columnas.
Cuando se realiza una consulta atrves de una vista, SQL server comprueba que todos los objetos de base de datos
a los que se hace referencia en la instrucción existen, que son validos en el contexto de la instrucción y que las
instrucciones de modificaciones de datos no infringen. ninguna regla de integridad de los datos. Las
comprobaciones que no son correctas devuelven un mensaje de error. Las comprovaciones correctas convierten
la accion en una accion conntra las tablas subyacentes. Si una vista depende de una tabla que se ha eliminado,
SQL server produce un mensaje de error si alguien trata de utilizar la vista. Si se crea una nueva tabla y la estructura
de la tabla no cambia de la tabla base anterior para sustituir a la eiminada, se puede volver a utilizar la vista de
nuevo. Si cambia la estructura de la nueva tabla será necesario eliminar la vista y volver a crearla. Cuando se crea
una vista, el nombre de la vista se almacena en la tabla sysobjects. La información acerca de la columnas definidas
en una vista se agregan a la tabla syscolumns y la información acerca de las columnas definidas una vista se
agregan a la tabla sysdepends. Además, el texto de la instrucción CREATE VIEW se agrega la tabla syscomments.

Se trata de un proceso similar al de un procedimiento almacenado; cuando la vista se ejecuta por primera vez,
solo su arbol de consulta se almacenan en la caché de procedimientos.

Vistas Horizontales
En las vistas horizontales se restringe el acceso de un usuario únicamente en las filas seleccionadas de una tabla.

Si queremos ver la información de la vista creada, basta con utilizar la sentencia SELECT sobre la vista.
Se puede complicar más las consultas e introducir subconsultas para generar la vista.

Vistas Verticales
En las vistas verticales se restringe el acceso de un usuario únicamente a determinadas columnas seleccionadas
de una tabla.
Vistas fila/columna
Es muy común utilizar vistas que dividan una tabla fuente tanto horizontal como verticalmente.

Vistas agrupadas
Se denominan vistas agrupadas las que contienen una cláusula GROUP BY que permite agrupar filas
relacionadas de datos y producir una fila de resultados para cada grupo que resume los resultaos de cada grupo.

Vistas Compuestas
Las vistas compuestas se crean especificando en la definición de la vista una consulta que involucre dos o mas
tablas. De esta forma, la vista extrae sus datos de dos o más tablas y presenta los resultados como una tabla
virtual.
Actualización de Vistas
La mayoría de las vistas suelen actualizarse realizando consultas INSERT o UPDATE sobre ellas, pero hay que
tener presentes las siguientes reglas:

 No se debe especificar DISTINCT para que las filas duplicadas no se eliminen de los resultados de las
consultas
 La clausula FROM debe especificar solo una tabla actualizable
 Cada elemento de selección debe ser una referencia de columna simple
 La clausula WHERE no debe incluir una subconsulta
 La consulta no debe incluir una clausula GROUP BY o HAVING

Modificación de Vistas con ALTER VIEW


La sentencia ALTER VIEW permite modificar una vista creada previamente incluidas las vistas indizadas , sin
afectar a los procedimientos almacenados ni a los desencadenadores dependientes, y sin cambiar los permisos.

Borrado de Vistas Con Drop View


La sentencia DROP VIEW permite borrar una vista de la base de datos. Su sintaxis es la siguiente DROP VIEW
{vista} [,…n].

El argumento vista es el nombre de la vista que se va a quitar. Los nombres de vistas deben seguir las reglas de
los identificadores. Especificar el propietario de la vista es opcional. El argumento un es un marcador de posición
que indica que se pueden especificar varias vistas.

Si las vistas o tablas subyacentes han cambiado desde que se creó la vista, podrá ser útil cambiar y volver a crear
la vista.
Índices
Un índice es una estructura que proporciona un acceso rápido a las filas de una tabla en base a los valores de
una o más columnas. Un índice en SQL es una estructura asociada a una tabla o vista que acelera la obtención de
filas de la tabla o la vista. Un índice contiene claves generadas a partir de una o varias columnas de la tabla o la
vista.

Dichas claves están almacenadas en una estructura que permite que SQL server busque de forma rápida y eficiente
la fila o filas asociadas a los valores de cada clave. La mayoría de los libros contienen un índice general de palabras,
nombres, lugares, etc. Las bases de datos contienen índices para tipos o columnas de datos seleccionados: es
parecido a un libro con un índice para los nombres de las personas y otro para los lugares. Cuando cree una base
de datos y la optimice para mejorar el rendimiento, es recomendable que cree índices para las columnas que se
utilizan en las consultas con el fin de buscar datos.

CLUSTERED crea un objeto en el que el orden físico de las filas es el mismo que el orden indizado de las filas y el
nivel inferior (hojas) del índice agrupado contiene las filas de datos reales. Una tabla o vista permite un índice
agrupado al mismo tiempo. Una vista con un índice agrupado se denomina vista indizada. Es necesario crear un
índice agrupado único en una vista antes de poder definir otros índices en la misma Vista. Cree el índice agrupado
antes de crear los índices no agrupados. Los índices no agrupados existentes en las tablas se vuelven a generar al
crear un índice agrupado. Si no se especifica CLUSTERED, se crea un índice no agrupado. Debido a que el nivel hoja
de un índice agrupado y sus páginas de datos son, por definición, lo mismo, la creación de un índice agrupado y la
utilización de la cláusula ON filegroup mueven efectivamente una tabla desde el archivo en que se creó la tabla
al nuevo grupo de archivos.

NONCLUSTERED crea un objeto que especifica la ordenación lógica de una tabla. Con un índice no agrupado, el
orden físico de las filas es independiente del orden indizado. El nivel hoja de un índice no agrupado contiene las
filas del índice. Cada fila del índice contiene el valor de clave no agrupada, y uno o varios localizadores de fila que
apuntan a la fila que contiene dicho valor. Si la tabla no tiene un índice agrupado, el: localizador de fila es la
dirección de disco de la fila. Si la tabla tiene un índice agrupad el localizador de fila es la clave del índice agrupado
de la fila, Cada tabla puede ten hasta 249 índices no agrupados (sin importar cómo se hayan creado:
implícitamente con las restricciones PRIMARY KEY y UNIQUE, o explícitamente con CREATE 1NDEX).
Cada índice puede proporcionar acceso a los datos en un orden distinto. Para las vistas indizadas, sólo se pueden
crear índices no agrupados en una vista que ya tenga definido un índice agrupado. Por lo tanto, el localizador de
fila de un índice no agrupado de una vista indizada siempre es la clave agrupada de la fila.
El argumento columna es la columna 0 columnas a las que se aplica el índice. Especifique dos o más nombres de
columna para crear un índice compuesto sobre los valores combinados de las columnas especificadas. Enumere
las columnas que desee incluir en el índice compuesto (en orden de prioridad) entre paréntesis después de table
No se pueden especificar como columnas.
Los valores de FILLFACTOR especificados por el usuario pueden estar entre l y 100. Si no se especifica un valor. el
valor predeterminado es Cuando FILLFACTOR es 0, sólo se llenan las páginas de hoja. Para cambiar el vale
predeterminado. Utilice un vale FILLFACTOR de 100 sólo cuando no se produzcan instrucciones TNSERT UPDATE.
Por ejemplo, en el caso de las tablas de sólo lectura Si FILLFACTOR 100… SQL Server crea índices con páginas de
hoja 100 por cien llenas. Un instrucción INSERT o UPDATE ejecutada después de la creación de un índice en *un
valor de *ILLFACTOR del m por cien hace que la página se divida con INSERT y, posiblemente, con cada UPDATE.
Los valores de FILLFACTOR más pequeños. excepto 0, hash que SQL Server cree nuevos índices con páginas hoja
que no están completamente llenas. Por ejemplo, un valor de FILLFACTOR de 10 puede ser una opción razonable
al crear un índice en una tabla que se sabe que contiene una pequeña parte de los datos que posiblemente
contendrá en el futuro. Valores más pequeños de FILLFACTOR hacen también que cada índice requiere más
espacio de almacenamiento.
IGNORE_DUP_KEY controla que ocurre cuando se realiza un intento de insertar un valor de clave duplicada en una
columna que sea parte de un índice agrupado único. Si se especificó IGNORE_DUP_KEY para el índice y se ejecuta
una instrucción INSERT que crea una clave duplicada, SQL Server emite un mensaje de advertencia y no tiene en
cuenta la fila duplicada. Si no se especificó IGNOREDUP4KEY para el índice, SQL Server emite un mensaje de en
deshacer la instrucción INSERT completa.

DROP_EXISTING especifica que el índice agrupado () no agrupados preexistente mencionado debe quitarse y
volverse a generar. El nombre del índice especificado debe ser el mismo que el índice existente actualmente.
Debido a que los índices no agrupados contienen las claves de agrupamiento, los índices no agrupados deben
volverse a generar cuando se quita un índice agrupado. Si se vuelve a crear un índice agrupado, los índices no
agrupados deben volverse a crear para que tengan en cuenta el nuevo conjunto de claves. La cláusula
DROP_EXISTTNG mejora el rendimiento cuando se vuelve a crear un índice agrupado (con el mismo conjunto de
claves o con uno distinto) en una tabla que también tiene índices no agrupados, La cláusula DROP_EXISTING
reemplaza la ejecución de una instrucción DRO & XNDEX en el antiguo índice agrupado seguida de la ejecución de
una instrucción CREATE INDEX para el nuevo índice agrupado. Los índices no agrupados vuelven a generarse una
vez, sólo si las claves son distintas. Si las claves no.

Borrado de índices
La sentencia utilizada para borrar índices es DROP INDEX. Su sintaxis es la siguiente:

DROP INDEX 'tabla.índice/vista.índice' [ ,….n 1]

El argumento tabla ¡ vista es la vista 0 tabla en que esta' ubicada la columna indizada. Para Ver una lista de los
índices que existen en una tabla o vista, utilice helpindex y especifique el nombre de la tabla o vista, Los nombres
de tablas y vistas se deben ajustar a las reglas de los identificadores. Especificar el propietario de la tabla o la vista
es opcional, El argumento índice es el nombre del índice que se va a quitan El argumento n es un marcador de
posición que indica que se pueden especificar varios índices.

La instrucción DROP INDEX no se aplica a los índices creados mediante la definición de las restricciones PRIMARY
KEY o UNIQUE (creados con las opciones PRIMARY KEY ¡) UNIQUE de las instrucciones CREATE TABLE o ALTER
TABLE, respectivamente). Después de ejecutar DROP INDEX, se obtiene todo el espacio que ocupaba
anteriormente el índice Después, se puede utilizar este espacio para cualquier objeto de base de datos. No se

puede especificar DROP INDEX sobre un índice de una tabla de sistema. Para quitar los índices creados para
implementar las restricciones PRIMARY KEY o UNIQUE, se debe quitarla restricción.
Los índices no agrupados tienen diferentes punteros a filas de datos que dependen de si se definió un índice
agrupado para la tabla. Si hay un índice agrupado, las filas hoja de los índices no agrupados utilizan las claves de
los índices agrupados para señalar a las filas de datos. Si la tabla es un montón, las filas hoja de los índices no
agrupados utilizan punteros de filas. Si quita un índice agrupado de una tabla que contiene índices no agrupados,
todos los índices no agrupados se vuelven a generar para reemplazar las claves del índice agrupado con punteros
de fila. Asimismo) cuando se quita el índice agrupado de una vista indizada, automáticamente se quitan todos los
índices no agrupados de la misma vista. A veces se quitan y se vuelven a crear los índices para reorganizar el índice,
por ejemplo, para aplicar un nuevo factor de relleno 0 para reorganizar los datos después de una carga masiva.
En este caso, es más eficaz utilizar CREATE INDEX ) la cláusula WITH DROP7_EXISTING, especialmente en índices
agrupados, Quitar un índice agrupado causa que se vuelvan a generar todos los índices no agrupados. Si, a
continuación, se vuelve a crear el índice agrupado, se generarán de nuevo los índices no agrupados para
reemplazar los punteros de filas con las claves del índice agrupado. La cláusula WITH DROP_EXISTING de CREATE
INDEX dispone de optimizaciones para impedir que se produzca la sobrecarga de generar dos veces los índices no
agrupados. También se puede utilizar DBCC DBREIN'DEX, que ofrece la ventaja de que no requiere que se conozca
la estructura del índice.

PROCESAMIENTO DE TRANSACCIONES
Una transacción de base de datos es una unidad de trabajo realizada por una o más sentencias SQL estrechamente
relacionadas.

Una transacción es una secuencia de operaciones realizadas como una sola unidad lógica de trabajo. Una unidad
lógica de trabajo debe exhibir cuatro propiedades, conocidas como propiedades AClD (atomicidad, coherencia,
aislamiento y durabilidad), para ser calificada como transacción.

Atomicidad: Una transacción debe ser una unidad atómica de trabajo, tanto si se realizan todas sus
modificaciones en los datos, como si no se realiza ninguna de ellas.

Coherencia: Cuando finaliza, una transacción debe dejar todos los datos en un estado coherente. En una base de
datos relacional, se deben aplicar todas las reglas a las modificaciones de la transacción para mantener la
integridad de todos los datos. Todas las estructuras internas de datos, como índices de árbol B 0 listas doblemente
vinculadas, deben estar correctas al final de la transacción.

Aislamiento: Las modificaciones realizadas por transacciones simultáneas se deben aislar de las modificaciones
llevadas a cabo por otras transacciones simultáneas. Una transacción ve los datos en el estado en que estaban
antes de que otra transacción simultánea los modificara () después de que la segunda transacción se haya
concluido, pero no ve un estado intermedio, Esto se conoce como seriabilidad debida que su resultado es la
capacidad de volver a cargar los datos iniciales y reproducir una serie de transacciones para finalizar con los datos
en el mismo estado en que estaban después de realizar las transacciones originales.

Durabilidad: Una vez concluida una transacción, sus efectos son permanentes en el sistema. Las modificaciones
persisten aún en el caso de producirse un error del sistema.

Los programadores de SQL son los responsables de iniciar y finalizar las transacciones en puntos que exijan la
coherencia lógica de los datos El programador debe definir la secuencia de modificaciones de datos que los dejan
en un estado coherente en relación con las reglas corporativas de la organización. A continuación, el programador
incluye estas instrucciones de modificación en una sola transacción de forma que SQL puede exigir la integridad
Física de la misma. Es responsabilidad de un sistema de base de datos corporativo como Oracle SQL proporcionar
los mecanismos que aseguren la integridad física de cada transacción.

SQL proporciona:

 Servicios de bloqueo que preservan el aislamiento de la transacción.


 Servicios de registro que aseguran la durabilidad de la transacción. Aun en el caso de que falle el hardware
del servidor, el sistema operativo o el propio SQL utiliza registros de transacciones, al reinicio, para
deshacer automáticamente las transacciones incompletas en el momento en que se produjo el error en
el sistema.
 Características de administración de transacciones que exigen la atomicidad y coherencia de la
transacción, Una vez iniciada una transacción, debe concluirse correctamente o SQL deshará todas las
modificaciones de datos realizadas desde que se inició la transacción.

Sentencia BEGIN TRANSACTI ON


BEGIN TRANSACTION marca el punto de inicio de una transacción local explícita. Representa un punto en el que
los datos a los que hace referencia una conexión son lógica y físicamente coherentes. La importancia de esta
sentencia radica en que si se producen errores, se pueden deshacer todas las modificaciones realizadas en los
datos después de BEGlN TRANSACTION para devolver los datos al estado conocido de coherencia Cada transacción
dura hasta que se completa sin errores y se emite COMMIT TRANSACTION para hacer que las modificaciones sean
una parte permanente de la base de datos, o hasta que se producen errores y se toman todas las modificaciones
con la instrucción ROLLBACK 'I'RANSACTION.

BEGIN TRANSACTION inicia una transacción local para la conexión que emite la instrucción. Según la configuración
del nivel de aislamiento de la transacción actual, la transacción bloquea muchos recursos adquiridos para aceptar
las instrucciones.

Transact-SQL que emite la conexión hasta que finaliza con una instrucción COMMIT TRANSACTION o ROLLBACK
TRANSACTION. Las transacciones que quedan pendientes durante mucho tiempo pueden impedir que otros
usuario.

Sentencia COMMIT TRANSACTION


sentencia marca el final de una transacción conecta implícita () definida por el usuario. COMMIT hace que todas
las modificaciones efectuadas sobre lo datos desde el nudo de la transacción sean parte permanente de la base
de datos.

EL argumento nombre_transacction especifica un nombre de una transacción por una instrucción BEGIN
TRANSACTION previa. Este argumento ayuda al programador, indicándole con que instrucción BEGIN
TRANSACTION anidada está asociada la instrucción COMMIT TRANSACTION.

Es responsabilidad del programador de SQL utilizar COMMIT sólo en el punto

donde todos los datos a los que hace referencia la transacción sean lógicamente correctos.
Sentencia COMMIT WORK
COMMIT WORK marca el final de una transacción. Su sintaxis es la siguiente: COMMIT [ WORK ]

Esta sentencia funciona de forma idéntica a la instrucción COMMIT TRANSACTION, excepto en que COMMIT
TRANSACTION acepta nombres de transacción definidos por el usuario. Esta sintaxis de COMMIT, con o sin la
especificación de la palabra clave opcional WORK, es compatible con SQL-92.

Como ejemplo, consideremos una transacción consistente en que se cambia la cantidad del pedido número
113051 de 4 a 10 unidades, 10 cual eleva su importe de 1.458 a 3.550 unidades monetarias. El pedido es de
Reductores QSAÍXK47 y fue atendido por el empleado número 108, que trabaja en la oficina número 21.

Comenzaremos registrando todos los movimientos que implica la transacción completa y finalizaremos
validándola con COMMIT para convertirla en definitiva.

Sentencia SAVE TRANSACTI ON


La sentencia SAVE TRANSACTION establece un punto de restauración (o punto de almacenamiento) dentro de una
transacción. Su sintaxis es la siguiente:

SAVE TRAN [ SACTION ] ( nombrejpuntofresLauración [

nombrefvariablefpuutofrestauración )

El argumento nombre_transacsion es el nombre asignado al punto almacenamiento. El argumento


nombrefvariuble_puntajertauracidn es el nombre de una variable definida por el usuario que contiene un nombre
de punto de almacenamiento válido La variable debe estar declarada con un tipo de datos char, varchar, nchar o
nvarchar.

Un usuario puede establecer un punto de almacenamiento, o marcador para restauración, dentro de una
transacción. El punto de almacenamiento define una ubicación a la que la transacción puede volver si se cancela
parte de la transacción de forma condicional. Si se deshace una transacción hasta un punto de almacenamiento,
se deberá continuar hasta su finalización (con más instrucciones Transact—SQL si es necesario y una instrucción
COMMÍT TRANSACTION) o se debe cancelar completamente (deshacer la transacción hasta su inicio). Para
cancelar una transacción completa, utilice ROLLBACK TRANSACTION (se deshacen todas las, instrucciones o
procedimientos de la transacción). No se admite SAVE TRANSACTION en transacciones distribuidas iniciadas
explícitamente con BEGIN DISTRIBUTED TRANSACTION u originadas ¿¡ partir de una transacción local.

Sentencia ROLLBACK TRANSACTION


Esta sentencia señala el Final sin éxito de una transacción. ROLLBACK elimina todas las modificaciones de datos
realizadas desde el inicio de la transacción, y también libera los recursos que retiene la transacción.

El argumento nombre_trannsacción especifica un nombre de transacción asignado por una instrucción BEGIN
TRANSACTION previa. El argumento nombreaViabletransancíón especifica del nombre de una variable definida
por el usuario que contiene un nombre de transacción válido. La variable se debe declararcon un tipo de datos
char, varchar, nchar o nvarchar. El argumento nambre_puntofrertaurucián es el punto de almacenamiento para
restauración de una instrucción SAVE TRANSACTION que permite retroceder la transacción al lugar especificado
por dicho nombre.

EJERCICIOS
CONCLUSIÓN

REFERENCIA BIBLIOGRAFICA
Cesar Pérez. (2007). Microsoft SQL server 2005 - administración y análisis de bases de datos.
España: Alfaomega, Ra-Ma.