2

CONTENIDO
CONTENIDO.............................................................................................................................2 UNIDAD 1.................................................................................................................................4 INTRODUCCIÓN AL SISTEMA MANEJADOR DE BASE DE DATOS (DBMS)................................4 1.1 CONCEPTOS...................................................................................................................7 1.2 CARACTERÍSTICAS DE UN DBMS....................................................................................8 UNIDAD 2.................................................................................................................................9 LENGUAJE DE DEFINICIÓN DE DATOS...................................................................................9 2.1 CREACIÓN DE BASE DE DATOS....................................................................................10 2.2 CREACIÓN DE TABLAS..................................................................................................11 2.2.1 INTEGRIDAD..........................................................................................................12 2.2.2 INTEGRIDAD REFERENCIAL DECLARATIVA.............................................................13 2.2.3 CREACIÓN DE ÍNDICES..........................................................................................14 UNIDAD 3...............................................................................................................................15 CONSULTAS Y LENGUAJE DE MANIPULACIÓN DE DATOS....................................................15 3.1 INSTRUCCIONES INSERT, UPDATE, DELETE..................................................................15 3.2 CONSULTAS BÁSICAS SELECT, WHERE Y FUNCIONES A NIVEL DE REGISTRO................18 3.3 CONSULTAS SOBRE MÚLTIPLES TABLAS.......................................................................19 3.3.1 SUBCONSULTAS.....................................................................................................20 3.3.2 OPERADORES JOIN................................................................................................20 3.4 AGREGACIÓN GROUP BY, HAVING................................................................................22 4.1 PROPIEDAD DE UNA TRANSACCIÓN..............................................................................27 4.2 GRADOS DE CONSISTENCIA.........................................................................................28 4.3 NIVELES DE AISLAMIENTO............................................................................................29 4.4 INSTRUCCIONES COMMIT Y ROLLBACK.........................................................................30 UNIDAD 5...............................................................................................................................31 VISTAS...............................................................................................................................31 5.1 DEFINICIÓN Y OBJETIVO DE LAS VISTAS.......................................................................32 5.2 INSTRUCCIONES PARA LA ADMINISTRACIÓN DE VISTAS...............................................33 UNIDAD 6...............................................................................................................................33 SEGURIDAD........................................................................................................................33 6.1 ESQUEMAS DE AUTORIZACIÓN.....................................................................................34 6.2 INSTRUCCIONES GRANT Y REVOKE..............................................................................35 UNIDAD 7...............................................................................................................................36 INTRODUCCIÓN AL SQL PROCEDURAL................................................................................36 7.1 PROCEDIMIENTOS ALMACENADOS...............................................................................37 7.2 DISPARADORES (TRIGGERS).........................................................................................38 BIBLIOGRAFÍA........................................................................................................................39

3

INTRODUCCIÓN

Una base de datos o banco de datos es un conjunto de datos pertenecientes a un mismo contexto y almacenados sistemáticamente para su posterior uso. En este sentido, una biblioteca puede considerarse una base de datos compuesta en su mayoría por documentos y textos impresos en papel e indexados para su consulta. En la actualidad, y debido al desarrollo tecnológico de campos como la informática y la electrónica, la mayoría de las bases de datos están en formato digital (electrónico), que ofrece un amplio rango de soluciones al problema de almacenar datos. Existen programas denominados sistemas gestores de bases de datos, abreviados SGBD, que permiten almacenar y posteriormente acceder a los datos de forma rápida y estructurada. Las propiedades de estos SGBD, así como su utilización y administración, se estudian dentro del ámbito de la informática. Las aplicaciones más usuales son para la gestión de empresas e instituciones públicas. También son ampliamente utilizadas en entornos científicos con el objeto de almacenar la información experimental. Aunque las bases de datos pueden contener muchos tipos de datos, algunos de ellos se encuentran protegidos por las leyes de varios países. Por ejemplo, en España los datos personales se encuentran protegidos por la Ley Orgánica de Protección de Datos de Carácter Personal (LOPD).

4

UNIDAD 1 INTRODUCCIÓN AL SISTEMA MANEJADOR DE BASE DE DATOS (DBMS)
El sistema manejador de bases de datos es la porción más importante del software de un sistema de base de datos. Un DBMS es una colección de numerosas rutinas de software interrelacionadas, cada una de las cuales es responsable de alguna tarea específica. Las funciones principales de un DBMS son: • • • • • • • Crear y organizar la Base de datos. Manejar los datos de acuerdo a las peticiones de los usuarios. Registrar el uso de las bases de datos. Interacción con el manejador de archivos. Respaldo y recuperación. Control de concurrencia. Seguridad e integridad.

Los Sistemas Gestores de Bases de Datos son un tipo de software muy específico, dedicado a servir de interfaz entre las bases de datos y las aplicaciones que la utilizan. Se compone de un lenguaje de definición de datos, de un lenguaje de manipulación de datos y de un lenguaje de consulta. En los textos que tratan este tema, o temas relacionados, se mencionan los términos SGBD y DBMS, siendo ambos equivalentes, y acrónimos, respectivamente, de Sistema Gestor de Bases de Datos y DataBase Management System, su expresión inglesa.

Motor ò Núcleo DBMS: recibe los requerimientos lógicos de E/S y los convierte en operaciones de lectura y escritura. Lógicos: son cualquier tipo de consulta requerimiento de lectura con ingreso de datos (requerimiento de estructura) es ayudado por el Sistema Operativo para convertir estos requerimientos lógicos en físicos que actúan sobre dispositivos de almacenamiento. Herramientas de definición: permite definir y modificar la estructura de la Base de Datos, a este nivel definimos lo que se conoce como "Esquema " que es la definición total de Base de Datos, es que definimos la estructura de la tabla, los tipos de campos, las restricciones para los campos. • • Subesquema: manejo de vistas de datos, de niveles externos. Esquema: manejo de niveles conceptuales.

las aplicaciones. • Minimizar Redundancia (Datos repetidos): desperdicio de Espacio de Almacenamiento. Desarrollo de Aplicaciones: me permite generar una aplicación por Diccionario de Datos: este es el componente al subsistema con el que interactúan directamente el DBA. • Cambio en datos no implica cambio en programas y viceversa (Menor coste de mantenimiento). le proporciona niveles de consulta y reportes útiles para su trabajo de administración. . DBMS Características y Objetos: • Independencia de Datos: el DBMS me provee una independencia de mis datos vs. ya sea en forma física ò lógica. Independencia de datos es proteger nuestro programa de aplicaciones frente a las modificaciones en la estructura de datos y viceversa. Es la descripción de la estructura de Base de Datos y relaciones entre datos. despliegue y visualización de datos. y programas.5 • • • Interface de Procesamiento: me provee de las facilidades de actualización.

El efecto que ocasiona la redundancia es tener inconsistencia de datos y desperdicio de espacio de almacenamiento. Independencia Lógica: protección a los programas de aplicación cuando se modifica el esquema. • Inconsistencia de Datos: dato que esta en lugar con un valor y encuentra en otro lugar con otro valor.6 Independencia Física: es protección a los programas de aplicación debido a cambios en la estructura de archivos. • Redundancia.1 CONCEPTOS . con cambios en las características de los campos. Ocurre cuando existe información contradictoria o incongruente en la base de datos. • 1. Esta se presenta cuando se repiten innecesariamente datos en los archivos que conforman la base de datos. datos repetidos y distribuidos en cualquier parte.

Proveer a los administradores las herramientas que les permitan ejecutar tareas de mantenimiento y administración de los datos.almacenamiento de datos en una base de datos definida. Los sistemas de administración de bases de datos son usados para: • • Permitir a los usuarios acceder y manipular la base de datos proveyendo métodos para construir sistemas de procesamiento de datos para aplicaciones que requieran acceso a los datos. por sus siglas en inglés) es un sistema basado en computador (software) que maneja una base de datos. por sus siglas en ingles). Actualización de los datos .7 Un sistema de administración de bases de datos DBMS (Database Management System.consultas y reportes. SQL: Lenguaje de Consulta. Recuperación de los datos . . Creación de la base de datos . Control de la integridad de la base de datos. DML (Data Manipulation Language): Lenguaje de Manipulación de Datos.cambiar los contenidos de la base de datos. Programación de aplicaciones de para el desarrollo de software. Esta compuesto por: • • • DDL (Data Definition Language): Lenguaje de Definición de Datos. o una colección de bases de datos o archivos. La persona que administra un D0BMS es conocida como el DBA (Database Administrator.como la información va a ser almacenada y organizada. Algunas de las funciones de un DBMS son: • • • • • • • Definición de la base de datos . Monitoreo del comportamiento de la base de datos.

• INDEPENDENCIA DE LOS DATOS. En las aplicaciones basadas en archivos. Las transacciones deben por lo tanto ser controladas de manera que no alteren la integridad de la base de datos. podrá acceder a mayor información que otros. Los datos interrelacionados deben siempre representar información correcta a los usuarios.2 CARACTERÍSTICAS DE UN DBMS Las principales características de un manejador de base de datos son: • CONTROL DE LA REDUNDANCIA DE DATOS Este consiste en lograr una mínima cantidad de espacio de almacenamiento para almacenar los datos evitando la duplicación de la información. el programa de aplicación debe conocer tanto la organización de los datos como las técnicas que el permiten acceder a los datos. • SEGURIDAD La disponibilidad de los datos puede ser restringida a ciertos usuarios. En los sistemas DBMS los programas de aplicación no necesitan conocer la organización de los datos en el disco duro. • . SOPORTE PARA CONTROL DE TRANSACCIONES Y RECUPERACIÓN DE FALLAS. Según los privilegios que posea cada usuario de la base de datos. La recuperación de fallas tiene que ver con la capacidad de un sistema DBMS de recuperar la información que se haya perdido durante una falla en el software o en el hardware. Este totalmente independiente de ello. Se conoce como transacción toda operación que se haga sobre la base de datos. • MANTENIMIENTO DE LA INTEGRIDAD La integridad de los datos es la que garantiza la precisión o exactitud de la información contenida en una base de datos.8 1.

El lenguaje de programación SQL. y la correspondencia entre ambos. DDL por sus siglas en inglés) es un lenguaje proporcionado por el sistema de gestión de base de datos que permite a los usuarios de la misma llevar a cabo las tareas de definición de las estructuras que almacenarán los datos así como de los procedimientos o funciones que permitan consultarlos. ya sea a usuarios específicos o a un rol creado dentro de la base de datos.9 • VELOCIDAD Los sistemas DBMS modernos poseen altas velocidades de respuesta y proceso. UNIDAD 2 LENGUAJE DE DEFINICIÓN DE DATOS Un lenguaje de definición de datos (Data Definition Language. vistas. procedimientos almacenados y triggers de la base de datos. los cuales sirven para otorgar permisos o quitarlos. cada una de las cuales se puede aplicar a las tablas. el primer paso consiste en especificar el esquema conceptual y el esquema interno de la base de datos. es el lenguaje de definición de datos (LDD). pero que su existencia depende de la implementación del estándar SQL que lleve a cabo el gestor de base de datos son GRANT y REVOKE. el más difundido entre los gestores de bases de datos. En muchos SGBD no se mantiene una separación estricta de niveles. • INDEPENDENCIA DEL HARDWARE La mayoría de los sistemas DBMS están disponibles para ser instalados en múltiples plataformas de hardware. Una vez finalizado el diseño de una base de datos y escogido un SGBD para su implementación. El SGBD posee un compilador de LDD cuya función consiste en procesar las sentencias del lenguaje para identificar las . DROP y ALTER. admite las siguientes sentencias de definición: CREATE. Otras que se incluyen dentro del DDL. por lo que el administrador de la base de datos y los diseñadores utilizan el mismo lenguaje para definir ambos esquemas.

antes de poder proceder a la creación de las tablas.1 CREACIÓN DE BASE DE DATOS Una base de datos en un sistema relacional está compuesta por un conjunto de tablas. De esta manera. lo que a menudo significa definir un espacio de nombres separado para cada conjunto de tablas. 2. columna en el de atributo y línea en el de tupla. sino de línea. pero sí la palabra columna. normalmente hay que crear la base de datos. y viceversa. y no se habla de tupla. A continuación se usarán indistintamente ambas terminologías.10 descripciones de los distintos elementos de los esquemas y almacenar la descripción del esquema en el catálogo o diccionario de datos. De esta manera. A menudo. En la terminología usada en SQL no se alude a las relaciones. normalmente hay que crear la base de datos. lo que a menudo significa definir un espacio de nombres separado para cada conjunto de tablas. El sistema previsto por el estándar para crear los espacios separados de nombres consiste en usar las instrucciones SQL "CREATE SCHEMA". Para crear una base de datos por ejemplo en Mysql debes de utilizar la instrucción CREATE DATABASE nombre_base_datos que es similar en los otros manejadores de bases de datos Prácticamente. del mismo modo que no se usa el término atributo. que corresponden a las relaciones del modelo relacional. dicho . por lo que tabla estará en lugar de relación. para una DBMS se pueden gestionar diferentes bases de datos independientes al mismo tiempo sin que se den conflictos con los nombres que se usan en cada una de ellas. la creación de la base de datos consiste en la creación de las tablas que la componen. En realidad. Antes de poder proceder a la creación de las tablas. para una DBMS se pueden gestionar diferentes bases de datos independientes al mismo tiempo sin que se den conflictos con los nombres que se usan en cada una de ellas.

una vez la base de datos está alojada en el servidor. pero también por las DBMS más difundidas. crear la tabla con el formato que deseemos lo cual nos puede ahorrar más de un quebradero de cabeza. las cuales trabajan directamente con comandos SQL y no por medio de editores. puede darse el caso de que queramos introducir una nueva tabla ya sea con carácter temporal (para gestionar un carrito de compra por ejemplo) o bien permanente por necesidades concretas de nuestra aplicación. puede ser necesario especificar cuáles de estos campos van a ser índices y de qué tipo van a serlo. Normalmente. En estos casos. es la siguiente: CREATE DATABASE nombre_base de datos 2. a partir de una sentencia SQL. La sintaxis empleada por PostgreSQL. Además.2 CREACIÓN DE TABLAS En general. podemos. . la mayoría de las bases de datos poseen potentes editores de bases que permiten la creación rápida y sencilla de cualquier tipo de tabla con cualquier tipo de formato.11 sistema no se usa pero cada DBMS prevé un procedimiento propietario para crear una base de datos. se amplía el lenguaje SQL introduciendo una instrucción no prevista en el estándar: "CREATE DATABASE". Sin embargo. los nombres de los campos y sus características. Este tipo de sentencias son especialmente útiles para bases de datos como Mysql. Para crear una tabla debemos especificar diversos datos: El nombre que le queremos asignar.

como por ejemplo si se reasigna un vendedor a una oficina no existente. Además. Los cambios en la base de datos pueden perderse debido a un error del sistema o a un fallo en el suministro de energía.… Esta información será la que gestionen todos los demás objetos de la base de datos (consultas. Pueden modificarse datos existentes tomando un valor incorrecto. los nombres de los campos y sus características. Los datos de los clientes. con el fin de poder dar respuesta a todas las cuestiones que se puedan plantear sobre el manejo de dicha información. que almacenarán la información. A continuación os explicamos someramente la sintaxis de esta sentencia y os proponemos una serie de ejemplos prácticos: Sintaxis Create Table nombre_tabla (nombre_campo_1 tipo_1 nombre_campo_2 tipo_2 nombre_campo_n tipo_n Key(campo_x. por lo que es muy importante planificar bien la estructura que van a tener los datos (como van a estar dispuestos en la tabla. de que naturaleza o tipo va a ser cada uno. etc. o tablas. Tras la creación de la base de datos el siguiente paso que se debe realizar es la creación de la tabla.) 2. Los cambios pueden ser aplicados parcialmente. Cuando los contenidos se modifican con sentencias INSERT.1 INTEGRIDAD El término integridad de datos se refiere a la corrección y completitud de los datos en una base de datos. Para crear una tabla debemos especificar diversos datos: El nombre que le queremos asignar. la integridad de los datos almacenados puede perderse de muchas maneras diferentes. Pueden añadirse datos no válidos a la base de datos.12 La sintaxis de creación puede variar ligeramente de una base de datos a otra ya que los tipos de campo aceptados no están completamente estandarizados. tales como un pedido que especifica un producto no existente. Una de las funciones importantes de un DBMS relacional es preservar la integridad de sus datos almacenados en la mayor medida posible. DELETE o UPDATE. etc…). de los socios.2. .. de los pedidos. como por ejemplo si se añade un pedido de un producto sin ajustar la cantidad disponible para vender... La sintaxis de creación puede variar ligeramente de una base de datos a otra ya que los tipos de campo aceptados no están completamente estandarizados. en que orden estarán colocados.). etc. formularios. puede ser necesario especificar cuáles de estos campos van a ser índices y de qué tipo van a serlo.

. 2. Las restricciones de integridad aseguran que la información contenida en una base de datos es correcta. ✔ La actualización en la clave ajena de la fila hijo. las filas hijos quedarán huérfanas. ✔ La supresión de una fila padre. con la que. Existen cuatro actualizaciones de la base de datos que pueden corromper la integridad referencial: ✔ La inserción de una fila hijo se produce cuando no coincide la clave ajena con la clave primaria del padre.2. donde se produce una actualización en la clave ajena de la fila hijo con una sentencia UPDATE y la misma no coincide con ninguna clave primaria. si no. Las restricciones de integridad aseguran que la información contenida en la base de datos cumple ciertas restricciones para los diferentes estados. Las restricciones de integridad son propiedades de la base de datos que se deben satisfacer en cualquier momento.se suprime. donde si en una fila padre. que tiene uno o más hijos se actualiza su clave primaria.13 Tipos de restricciones de integridad Datos Requeridos: establece que una columna tenga un valor no NULL. al cumplir ciertas aserciones. ✔ La actualización de la clave primaria de una fila padre.2 INTEGRIDAD REFERENCIAL DECLARATIVA La integridad de los datos es la propiedad que asegura que información dada es correcta. las filas hijos quedarán huérfanas. • Chequeo de Validez: cuando se crea una tabla cada columna tiene un tipo de datos y el DBMS asegura que solamente los datos del tipo especificado sean ingresados en la tabla. Se define efectuando la declaración de una columna es NOT NULL cuando la tabla que contiene las columnas se crea por primera vez. Se especifica en la sentencia CREATE TABLE. si una fila padre -que tiene uno o más hijos. la base de datos perderá su integridad. El DBMS comprueba automáticamente la unicidad del valor de la clave primaria con cada sentencia INSERT Y UPDATE. como parte de la sentencia CREATE TABLE. • Integridad de entidad: establece que la clave primaria de una tabla debe tener un valor único para cada fila de la tabla. • Integridad referencial: asegura la integridad entre las claves ajenas y primarias (relaciones padre/hijo). Un intento de insertar o actualizar una fila con un valor de la clave primaria ya existente fallará.

También tendrá otros atributos como el nombre y la dirección. sin repeticiones innecesarias. • • 2. Existen tres tipos de integridad referencial: • Integridad referencial débil: si en una tupla de R todos los valores de los atributos de K tienen un valor que no es el nulo.14 La integridad referencial es una propiedad deseable en las bases de datos. datos perdidos y relaciones mal resueltas. Todas las bases de datos relacionales gozan de esta propiedad gracias a que el software gestor de base de datos vela por su cumplimiento. las bases de datos jerárquicas requieren que los programadores se aseguren de mantener tal propiedad en sus programas.2. Por sentido común es evidente que todo valor de DNI_cliente debe corresponder con algún valor existente del atributo DNI de la entidad Persona. que existen en la base de datos. entonces debe existir una tupla en S que tome esos mismos valores en los atributos de J. o INDEX) es un grupo de datos que MySQL asocia con una o varias columnas de la tabla. y Integridad referencial completa: en una tupla de R todos los atributos de K deben tener el valor nulo o bien todos tienen un valor que no es el nulo y entonces debe existir una tupla en S que tome en los atributos de J los mismos valores que toman los de K. datos perdidos y relaciones mal resueltas.3 CREACIÓN DE ÍNDICES Un índice (o KEY. Toda factura corresponde a una persona y solamente una. entonces debe existir una tupla en S que tome en los atributos de J los mismos valores que los atributos de K con valor no nulo. Esta es la idea intuitiva de la integridad referencial. Supongamos que una persona se identifica por su atributo DNI (Documento nacional de identidad). es decir. sin repeticiones innecesarias. Implica que en todo momento dichos datos sean correctos. La entidad Factura debe tener un atributo DNI_cliente que identifique a quién pertenece la factura. Implica que en todo momento dichos datos sean correctos. Integridad referencial parcial: si en una tupla de R algún atributo de K toma el valor nulo. Ejemplo: Supongamos una base de datos con las entidades Persona y Factura. En cambio. Gracias a la integridad referencial se garantiza que una entidad (fila o registro) siempre se relaciona con otras entidades válidas. En este grupo de datos aparece la relación entre el contenido y el número de fila donde está ubicado. .

) La sintaxis es ligeramente distinta segun la clase de índice: PRIMARY KEY (nombre_columna_1 [.. columna_indexada2.]) INDEX nombre_index (columna_indexada1 [. la de autor es una columna buena candidata a un indice. No así en MySQL donde son sinónimos.columna_indexada2. UNIDAD 3 .columna_indexada2 .... En este ejemplo. no.. VARCHAR o TEXT. Los indices FULL TEXT permiten realizar búsquedas de palabras. y no crearlos con aquellas columnas que vayan a ser objeto de un SELECT: SELECT texto from tabla_libros WHERE autor = Vazquez.sirven para agilizar las consultas a las tablas. Se trata de un índice diseñado para consultas especialmente rápidas..nombre_columna2..]) Podemos también añadirlos a una tabla después de creada: ALTER TABLE nombre_tabla ADD INDEX nombre_indice (columna_indexada). evitando que mysql tenga que revisar todos los datos disponibles para devolver el resultado. la de texto. mientras que no son buenas candidatas las que tienen muchos valores idénticos.. usando la palabra INDEX seguida del nombre del índice a crear y columnas a indexar (que pueden ser varias): INDEX nombre_indice (columna_indexada.]) UNIQUE INDEX nombre_indice (columna_indexada1 [. Tipos de índice En algunas bases de datos existen diferencias entre KEY e INDEX. WHERE La regla básica es pues crear tus índices sobre aquellas columnas que vayas a usar con una cláusula WHERE. Podemos crear el índice a la vez que creamos la tabla. Un índice que sí es especial es el llamado PRIMARY KEY. Puedes crear indices FULLTEXT sobre columnas tipo CHAR... Todos sus campos deben ser UNICOS y no admite NULL Un indice UNIQUE es aquel que no permite almacenar dos valores iguales. Otra regla básica es que son mejores candidatas a indexar aquellas columnas que presentan muchos valores distintos. como por ejemplo sexo (masculino y femenino) porque cada consulta implicará siempre recorrer prácticamente la mitad del índice.15 Los índices -como los índices de los libros. Si queremos eliminar un índice: ALTER TABLE tabla_nombre DROP INDEX nombre_indice Los index permiten mayor rápidez en la ejecución de las consultas a la base de datos tipo SELECT .

. CODASYL u otras. DELETE En SQL. • lenguajes de consulta no procedimentales En los lenguajes no procedimentales el usuario describe la información deseada sin un procedimiento específico para obtener esa información. organizados por el modelo de datos adecuado. "columna2". Otros ejemplos de DML son los usados por bases de datos IMS/DL1.) Suponiendo que tenemos una taba con la siguiente estructura. utilizaremos la siguiente escritura SQL: . En ese día. Clasificación del lenguaje de manipulación de datos: Son DML: Select Insert Delete Update Se clasifican en dos grandes grupos: • Lenguajes de consulta procedimentales Lenguajes procedimentales.. . Por lo tanto. usado para recuperar y manipular datos en una base de datos relacional. El lenguaje de manipulación de datos más popular hoy día es SQL. . Tabla Store_Information Column Name Data Type store_name char(50) Sales float Date datetime Y ahora deseamos insertar una fila adicional en la tabla que represente los datos de ventas para Los Ángeles el 10 de enero de 1999. "valor2". hay fundamental y básicamente dos formas para insertar datos en una tabla: Una es insertar una fila por vez.. 3. DML) es un lenguaje proporcionado por el sistema de gestión de base de datos que permite a los usuarios de la misma llevar a cabo las tareas de consulta o manipulación de los datos. Primero observemos como podemos insertamos datos a través de una fila por vez: La sintaxis para insertar datos en una tabla mediante una fila por vez es la siguiente: INSERT INTO "nombre_tabla" ("columna1". UPDATE. este negocio tenía $900 dólares estadounidenses en ventas.16 CONSULTAS DATOS Y LENGUAJE DE MANIPULACIÓN DE Un Lenguaje de Manipulación de Datos (Data Manipulation Language. En este tipo de lenguaje el usuario da instrucciones al sistema para que realice una serie de procedimientos u operaciones en la base de datos para calcular un resultado final.1 INSTRUCCIONES INSERT.) VALUES ("valor1".. y la otra es insertar filas múltiples por vez.

. Si está pensando si esto significa que está utilizando información de otra tabla.. en Oracle. Sales. Date) VALUES ('Los Angeles'. Para hacerlo. "columna4". y HAVING. La sintaxis es la siguiente: INSERT INTO "tabla1" ("columna1". Una vez que hay datos en la tabla.'yyyy')=1998. y ya conoce en donde reside la fuente de datos en tabla Sales_Information table. está en lo correcto.. Sales. Sales. La sintaxis para esto es. . donde insertamos una única fila al especificar sus valores para todas las columnas. si deseamos tener una tabla Store_Information. UPDATE "nombre_tabla" SET "columna_1" = [nuevo valor] WHERE {condición} Por ejemplo. Date) SELECT store_name. que recolecte la información de ventas para el año 1998. podríamos tener la necesidad de modificar los mismos. Por ejemplo. utilizamos el siguiente SQL: . Para hacerlo. Ingresaremos: INSERT INTO Store_Information (store_name.17 INSERT INTO Store_Information (store_name. ahora utilizamos la instrucción SELECT para especificar los datos que deseamos insertar en la tabla. Date FROM Sales_Information WHERE Year(Date) = 1998 Aquí hemos utilizado la sintaxis de Servidor SQL para extraer la información anual por medio de una fecha. La instrucción entera puede contener fácilmente cláusulas WHERE.) SELECT "columna3". así como también uniones y alias. digamos que actualmente tenemos la tabla a continuación: Tabla Store_Information store_name Sales Date Los Angeles 1500 € 05-Jan-1999 San Diego 250 € 07-Jan-1999 Los Angeles 300 € 08-Jan-1999 Boston 700 € 08-Jan-1999 Y notamos que las ventas para Los Angeles el 08/01/1999 es realmente de 500€ en vez de 300€ dólares estadounidenses. FROM "tabla2" Note que esta es la forma más simple. utilizamos el comando UPDATE. utilizará to_char (date. y que esa entrada en particular necesita actualizarse. A diferencia del ejemplo anterior. '10-Jan-1999') El segundo tipo de INSERT INTO nos permite insertar filas múltiples en una tabla.. Otras bases de datos relacionales pueden tener sintaxis diferentes. Entonces por ejemplo.. GROUP BY. "columna2". 900.

Para ello.2 CONSULTAS BÁSICAS SELECT. WHERE Y FUNCIONES A NIVEL DE REGISTRO. Por ejemplo. La sintaxis para esto es. colonne 2 = [valor2] WHERE {condición} A veces podemos desear deshacernos de los registros de una tabla. Si hay múltiples filas que satisfacen la condición. utilizamos el comando DELETE FROM. También es posible UPDATE múltiples columnas al mismo tiempo. todas ellas se modificarán. hay sólo una fila que satisface la condición en la cláusula WHERE. digamos que actualmente tenemos la siguiente tabla: Tabla Store_Information store_name Sales Date Los Angeles 1500 € 05-Jan-1999 San Diego 250 € 07-Jan-1999 Los Angeles 300 € 08-Jan-1999 Boston 700 € 08-Jan-1999 Y decidimos no mantener ninguna información sobre Los Ángeles en esta tabla. vemos . Inmediatamente. Para qué utilizamos los comandos SQL El uso común es la selección de datos desde tablas ubicadas en una base de datos. La sintaxis en este caso se vería como la siguiente: UPDATE "nombre_tabla" SET colonne 1 = [[valor1]. Para lograrlo.18 UPDATE Store_Information SET Sales = 500 WHERE store_name = "Los Angeles" AND Date = "08-Jan-1999" La tabla resultante ser vería Tabla Store_Information store_name Sales Date Los Angeles 1500 € 05-Jan-1999 San Diego 250 € 07-Jan-1999 Los Angeles 500 € 08-Jan-1999 Boston 700 € 08-Jan-1999 En este caso. ingresamos el siguiente SQL: DELETE FROM Store_Information WHERE store_name = "Los Angeles" store_name Sales Date San Diego 250 € 07-Jan-1999 Boston 700 € 08-Jan-1999 3. DELETE FROM "nombre_tabla" WHERE {condición} Es más fácil utilizar un ejemplo.

. Por ejemplo. para seleccionar todos los negocios con ventas mayores a 1. ingresamos: SELECT store_name FROM Store_Information Resultado: store_na me Los Angeles San Diego Los Angeles Boston Pueden seleccionarse los nombres de columnas múltiples. utilizamos la palabra clave WHERE. Luego. podríamos desear seleccionar condicionalmente los datos de una tabla. Para seleccionar todos los negocios en esta tabla.000€ en la Tabla Store_Information. suponga que tenemos la siguiente tabla: Tabla Store_Information store_na Sales Date me Los 1500 05-JanAngeles € 1999 07-JanSan Diego 250 € 1999 Los 08-Jan300 € Angeles 1999 08-JanBoston 700 € 1999 Podemos utilizar esta tabla como ejemplo a lo largo de la guía de referencia (esta tabla aparecerá en todas las secciones). Por lo tanto tenemos la estructura SQL más básica: SELECT "nombre_columna" FROM "nombre_tabla" Para ilustrar el ejemplo anterior. podríamos desear sólo recuperar los negocios con ventas mayores a $1.000 dólares. La sintaxis es la siguiente: SELECT "nombre_columna" FROM "nombre_tabla" WHERE "condición" Por ejemplo.19 dos palabras claves: necesitamos SELECT la información FROM una tabla. Para obtener más información acerca de cómo manipular tablas. así como también los nombres de tablas múltiples. (Note que la tabla es un contenedor que reside en la base de datos donde se almacena la información. Para ello.

funciones. expresiones. Las tablas de la JOIN deben aparecer en el FROM. Detalla de que tablas o vistas debe obtenerse la información Para obtener información de más de una tabla.20 Tabla Store_Information store_na me Los Angeles Sales Date 1500 05-Jan€ 1999 07-JanSan Diego 250 € 1999 Los 08-Jan300 € Angeles 1999 08-JanBoston 700 € 1999 Ingresamos: SELECT store_name FROM Store_Information WHERE Sales > 1000 Resultado: store_name Los Angeles 3.3 CONSULTAS SOBRE MÚLTIPLES TABLAS En una base de datos relacional. Las cláusulas obligatorias en unaconsulta son: • SELECT. …) que debe visualizarse • FROM. La SELECT puede tener columnas o expresiones de una o más de estas tablas. En la cláusula WHERE se definen las relaciones entre las tablas listadas en la cláusula FROM. Una JOIN es una consulta que combina filas de dos o más tablas o vistas. la información está distribuida entre diferentes tablas relacionadas. es necesario identificar las columnas comunes entre cada par de tablas relacionadas. Lista de la información (columnas. .

A menudo. no se refiere a ninguna columna de las tablas designadas en la from de la subconsulta sino a una columna de las tablas designadas en la from de la consulta principal. 3. La sintaxis es la siguiente: SELECT "nombre1_columna" FROM "nombre1_tabla" WHERE "nombre2_columna" [Operador de Comparación] (SELECT "nombre3_columna" FROM "nombre2_tabla" WHERE [Condición]) Una subconsulta es una sentencia select que aparece dentro de otra sentencia select que llamaremos consulta principal.3. en la cláusula where o en la cláusula having de la consulta principal. es necesario.1 SUBCONSULTAS Es posible incorporar una instrucción SQL dentro de otra. ese nombre de columna se denomina referencia externa. Una referencia externa es un nombre de columna que estando en la subconsulta.2 OPERADORES JOIN Ahora miremos las uniones. no puede contener la cláusula order by. hacer referencia al valor de una columna en la fila actual de la consulta principal. Se puede encontrar en la lista de selección. (SELECT MIN(fechapedido) FROM pedidos WHERE rep = numemp) FROM empleados. tenemos una construcción de subconsulta. además tiene algunas restricciones en cuanto a número de columnas según el lugar donde aparece en la consulta principal.3. ni puede ser la unión de varias sentencias select. Ejemplo: SELECT numemp. nombre. dentro del cuerpo de una subconsulta. Digamos que tenemos las siguientes dos tablas: Tabla Store_Information store_na Sales Date me Los 1500 05-JanAngeles € 1999 07-JanSan Diego 250 € 1999 Los 08-Jan300 € Angeles 1999 Boston 700 € 08-Jan- . Para realizar uniones en SQL se requieren mucho de los elementos que ya hemos presentado. Una subconsulta tiene la misma sintaxis que una sentencia select normal exceptuando que aparece encerrada entre paréntesis.21 3. Cuando esto se hace en las instrucciones where o having.

encontramos que están enlazadas a través del campo común “nombre_negocio” Primero presentaremos la instrucción SQL y explicaremos el uso de cada segmento después: SELECT A1. Note como se utilizan los alias de tabla aquí: Geografía se denomina A1. Aquí es donde se especifica la condición de la unión. especialmente cuando se incluyen tablas múltiples. el primero es el campo "nombre_región" de la tabla Geography (denominado REGIÓN). Vemos que la tabla Geography incluye información sobre regiones y negocios. SUM(A2. SUM(Store_Information. Al examinar las dos tablas.Sales) Que es mucho más problemática. pongamos nuestra atención en la línea 2.store_name = A2. los alias de tabla facilitan el entendimiento de la totalidad de la instrucción SQL. Luego.region_name REGION. e Información_Negocio se denomina A2. Sin los alias.region_name Resultado: REGIÓ SALE N S East 700 € 2050 West € Las primeras dos líneas le indican a SQL que seleccione dos campos. Para obtener la información de ventas por región. Store_Information A2 WHERE A1. queremos . y el segundo es la suma del campo "Sales" de la tabla Store_Information (denominado SALES). la instrucción WHERE.store_name GROUP BY A1. y la tabla Store_Information contiene información de ventas para cada negocio. debemos combinar la información de las dos tablas. En esencia.region_name REGION. la primera línea sería SELECT SALES Geography. En este caso.22 1999 Tabla Geography region_na store_na me me East Boston East New York Los West Angeles West San Diego Y queremos saber las ventas por región.Sales) SALES FROM Geography A1.

23 asegurarnos que el contenido en “nombre_negocio” en la tabla Geografía concuerde con la tabla Store_Information. SUM("nombre2_columna") FROM "nombre_tabla" GROUP BY "nombre1-columna" Ilustremos utilizando la siguiente tabla. Las uniones cartesianas darán por resultado que de la consulta se arroje toda combinación posible de las dos tablas (o cualquiera que sea el número de tablas en la instrucción FROM). 3. Tabla Store_Information store_na Sales Date me Los 1500 05-JanAngeles € 1999 07-JanSan Diego 250 € 1999 Los 08-Jan300 € Angeles 1999 Boston 700 € 08-Jan- . necesitamos asegurarnos de que hayamos seleccionado el nombre del negocio así como también las ventas totales. una unión cartesiana resultaría en un total de 4x4 = Se presenta un resultado de16 filas.4 AGREGACIÓN GROUP BY. necesitamos hacer dos cosas: Primero. La sintaxis SQL correspondiente es. Así tenemos para atributos numéricos. y la forma de hacerlo es igualarlos. debemos asegurarnos de que todas las sumas de las ventas estén group by negocios. Sin la correcta instrucción WHERE se producirá una Unión Cartesiana. aunque se puede utilizar NVL (en Oracle) para forzar a que considere a NULL como un valor determinado. Segundo. En este caso. Las funciones de agrupación ignoran los valores NULL en las consultas.AREA FROM PROFESORES GROUP BY AREA. La cláusula GROUP BY seguida de una lista de atributos permite agrupar las tuplas en Grupos que tengan los mismos valores en todos los atributos de esa lista Ejemplo: “Obtener el número de profesores de cada área” SELECT COUNT(*) . SELECT "nombre1_columna". HAVING Las funciones de agrupación operan sobre conjuntos de filas para dar un resultado por grupo. Si quisiéramos calcular el total de ventas para cada negocio entonces. Esta instrucción WHEREes esencial para asegurarse de que obtenga el resultado correcto.

La cláusula having se coloca generalmente cerca del fin de la instrucción sql. que se reserva para funciones de agregados.24 1999 Deseamos saber las ventas totales para cada negocio. En nuestro ejemplo. a pesar de que necesitemos utilizar la cláusula having. podríamos desear ver sólo los negocios con ventas mayores a 1 500 €. ingresaríamos. En vez de utilizar la cláusula where en la instrucción sql. SELECT store_name.COUNT(*) FROM DOCENCIA GROUP BY PROFESOR HAVING COUNT(*)>10. Para hacerlo. pero sólo de aquellos profesores que Imparten más de 10 clases” SELECT PROFESOR. Puede o no incluir la cláusula group by sintaxis para having es. es decir. Otra cosa que las personas pueden hacer es limitar el resultado según la suma correspondiente (o cualquier otra función de agregado). tabla store_information. todas las columnas excepto aquella(s) que se operan por un operador aritmético. Select "nombre1_columna". SUM(Sales) FROM Store_Information GROUP BY store_name Resultado: store_na SUM(Sale me s) Los 1800 € Angeles San 250 € Diego 700 € Boston> La palabra clave group by se utiliza cuando estamos seleccionado columnas múltiples desde una tabla (o tablas) y aparece al menos un operador aritmético en la instrucción select. La cláusula HAVING permite establecer una condición sobre los grupos de manera que Sólo se seleccionan aquellos grupos que la cumplen “listar los profesores y el nº de clases que imparten. Cuando esto sucede. Por ejemplo. sum("nombre2_columna") from "nombre_tabla" group by "nombre1_columna" having (condición de función aritmética) Nota: la cláusula group by es opcional. necesitamos group by todas las otras columnas seleccionadas. y la instrucción sql con la cláusula having. .

SUM(sales) FROM Store_Information GROUP BY store_name HAVING SUM(sales) > 1500 Resultado: store_na SUM(Sale me s) Los 1800 € Angeles 3. y la cláusula having se utiliza para poner una condición a los grupos. La función de agregación se coloca en la línea select. SQL proporciona cinco funciones de agregación primitivas: • avg: media aritmética de un atributo o una expresión numérica • min: mínimo de un atributo o expresión numérica • max: máximo de un atributo o expresión numérica • sum: suma total de atributos o expresiones numéricas • count (*): contador de tuplas • count (distinct): contador de tuplas parcial. MAX. no tiene en cuenta Todos los operadores. y estas son: . SELECT store_name. AVG.COUNT .MAX . MIN Funciones de agregación Son funciones que toman una colección de valores como entrada y producen un único valor de salida. La cláusula group by se utiliza cuando las funciones de agregación se aplican a un grupo de conjuntos de tuplas.25 Tabla store_information store_na Sales Date me Los 1500 05-JanAngeles € 1999 07-JanSan Diego 250 € 1999 Los 08-Jan300 € Angeles 1999 08-JanBoston 700 € 1999 Ingresaríamos.5 FUNCIONES DE CONJUNTO DE REGISTROS COUNT.AVG . SQL tiene varias funciones aritméticas. excepto avg y sum. pueden operar con números y cadenas de caracteres. SUM.

Los diferentes proveedores RDBMS tienen diferentes implementaciones de funciones de cadenas. Para ingresar datos del tipo caracter. SELECT "tipo de función"("nombre_columna") FROM "nombre_tabla" Por ejemplo. Otra función aritmética es COUNT. Además de utilizar dichas funciones. tales como funciones de concatenación. La sintaxis es. si deseamos encontrar el número de entradas de negocios en nuestra tabla. si deseamos obtener la sumatoria de todas las ventas de la siguiente tabla. SELECT COUNT("nombre_columna") FROM "nombre_columna" Por ejemplo. Tabla Store_Information store_na Sales Date me Los 1500 05-JanAngeles € 1999 07-JanSan Diego 250 € 1999 .MIN . y es mejor consultar las referencias para sus RDBMS a fin de ver cómo se utilizan estas funciones. reducción y subcadena.SUM La sintaxis para el uso de funciones es. también es posible utilizar SQL para realizar tareas simples como suma (+) y resta (-). Tabla Store_Information store_na Sales Date me Los 1500 05-JanAngeles € 1999 07-JanSan Diego 250 € 1999 Los 08-Jan300 € Angeles 1999 08-JanBoston 700 € 1999 Ingresaríamos SELECT SUM(Sales) FROM Store_Information Resultado: SUM(Sales) 2750 € 2 750 € representa la suma de todas las entradas de Ventas: 1500 € + 250 € + 300 € + 700 €. hay también varias funciones de cadenas disponibles.26 . Esto nos permite COUNT el número de filas en una tabla determinada.

27 Los Angeles Boston 08-Jan1999 08-Jan700 € 1999 300 € Ingresamos. Esta abstracción de una ejecución atómica y confiable de una aplicación se conoce como una transacción. SELECT COUNT(DISTINCT store_name) FROM Store_Information Resultado: Count(DISTINCT store_name) 3 UNIDAD 4 CONTROL DE TRANSACCIONES Los sistemas que tratan el problema de control de concurrencia permiten que sus usuarios asuman que cada una de sus aplicaciones se ejecuta atómicamente. SELECT COUNT(store_name) FROM Store_Information Resultado: Count(store_name) 4 COUNT y DISTINCT pueden utilizarse juntos en una instrucción para determinar el número de las distintas entradas en una tabla. como si no existieran otras aplicaciones ejecutándose concurrentemente. si deseamos saber el número de los distintos negocios. Un algoritmo de control de concurrencia asegura que las transacciones se ejecuten atómicamente controlando la intercalación de transacciones . Por ejemplo. ingresaríamos.

En otras palabras. es decir: Cada transacción accede a información compartida sin interferir con otras transacciones. Por supuesto. el registro correspondientes debe existir) definidas sobre ella. en caso contrario no tiene afecto alguno. o todas las acciones de la transacción se realizan o ninguna de ellas se lleva a cabo. Por lo tanto. Una base de datos está en un estado consistente si obedece todas las restricciones de integridad (significa que cuando un registro en una tabla haga referencia a un registro en otra tabla. Una transacción es la ejecución de ciertas instrucciones que accedan a una base de datos compartida. sin ninguna intercalación. El concepto principal es el de transacción.1 PROPIEDAD DE UNA TRANSACCIÓN PROPIEDADES FUNDAMENTALES DE UNA TRANSACCIÓN: • Atomicidad Se refiere al hecho de que una transacción se trata como una unidad de operación. una transacción es la ejecución de ciertas instrucciones que accedan a una base de datos compartida. y si una transacción termina normalmente. inserciones y supresiones de información. Informalmente. para dar la ilusión de que las transacciones se ejecutan serialmente. 4. sus resultados parciales sean anulados. Las ejecuciones intercaladas cuyos efectos son los mismos que las ejecuciones seriales son denominadas serializables y son correctos ya que soportan la ilusión de la atomicidad de las transacciones. Los cambios de estado ocurren debido a actualizaciones. El objetivo del control de concurrencia y recuperación es asegurar que dichas transacciones se ejecuten atómicamente.28 concurrentes. todos sus efectos son permanentes. es decir: Cada transacción accede a información compartida sin interferir con otras transacciones. todos sus efectos son permanentes. y si una transacción termina normalmente. una después de la otra. El objetivo del control de concurrencia y recuperación es asegurar que dichas transacciones se ejecuten atómicamente. en caso contrario no tiene afecto alguno. una transacción es un programa correcto que lleva a la base de datos de un estado consistente a otro • . La atomicidad requiere que si una transacción se interrumpe por una falla. se quiere asegurar que la base de datos nunca entre en un estado de inconsistencia. Consistencia La consistencia de una transacción es simplemente su correctitud.

Podría definirse como la coherencia entre todos los datos de la base de datos. el procesamiento de transacciones es una de las tareas más importantes dentro de un sistema de base de datos. sus resultados son permanentes y no pueden ser borrados de la base de datos por alguna falla posterior. tales como: • • • • • • Confiabilidad Puesto que los sistemas de base de datos en línea no pueden fallar. La mayoría de medianas y grandes compañías modernas utilizan el procesamiento de transacciones para sus sistemas de producción. el cual trata sobre cómo recuperar la base de datos a un estado consistente donde todas las acciones que han finalizado con éxito queden reflejadas en la base. Como puede percibirse. Cuando se . la aplicación simple más amplia de las computadoras. se ha convertido en el elemento que facilita el comercio electrónico. Tiempos de Respuesta En sistemas de este tipo. Aislamiento Una transacción en ejecución no puede revelar sus resultados a otras transacciones concurrentes antes de finalizar. por una parte obtener una transparencia adecuada de las acciones concurrentes a una base de datos y por otra. los sistemas manejadores de base de datos aseguran que los resultados de una transacción sobrevivirán a fallas del sistema.29 con la misma característica. el tiempo de respuesta de las transacciones no debe ser mayor a doce segundos. Atomicidad En el procesamiento de transacciones no se aceptan resultados parciales.2 GRADOS DE CONSISTENCIA Consistencia es un término más amplio que el de integridad. lo que se persigue con el procesamiento de transacciones es. En esencia. hroughput Los sistemas de base de datos en línea requieren procesar miles de transacciones por segundo. Más aún. manejar adecuadamente las fallas que se puedan presentar en una base de datos. pero a la vez. Disponibilidad Debido a que los sistemas de base de datos en línea deben estar actualizados correctamente todo el tiempo. Permanencia No se permite la eliminación en la base de datos de los efectos de una transacción que ha culminado con éxito 4. probablemente. si varias transacciones se ejecutan concurrentemente. Esta propiedad motiva el aspecto de recuperación de base de datos. los resultados deben ser los mismos que si ellas se hubieran ejecutado de manera secuencial. y es tan imprescindible que las organizaciones no pueden funcionar en ausencia de él. Por lo tanto. • • • El procesamiento de transacciones representa una enorme y significativa porción del mercado de los sistemas informáticos (más de cincuenta billones de dólares al año) y es. Debido a esto. Además. es una de las más difíciles de manejar debido a diversos aspectos. las transacciones no violan las restricciones de integridad de una base de datos. Permanencia Es la propiedad de las transacciones que asegura que una vez que una transacción finaliza exitosamente.

Los algoritmos de control de datos semántico tienen que satisfacer siempre las restricciones de integridad cuando una transacción pretende hacer un commit. Parcialmente comprometida (Uncommited): Después de ejecutarse la última transacción. • Protocolos de confiabilidad. Una transacción que termina con éxito se dice que está comprometida (commited). Comprometida (Commited): tras completarse con éxito. • • Si se confirma definitivamente el sistema asegura la persistencia de los cambios que ha efectuado en la base de datos. Pero la consistencia también puede perderse por razones de funcionamiento. La consistencia entre transacciones se garantiza mediante el aislamiento de las mismas. Así también. • • Si se confirma definitivamente el sistema asegura la persistencia de los cambios que ha efectuado en la base de datos. Es importante considerar si las transacciones son planas o pueden estar anidadas. 4. • Consistencia de la base de datos interna. • • • • • Activa (Active): el estado inicial. Una transacción finalizada (confirmada parcialmente) puede no confirmarse definitivamente (consistencia). una transacción que haya sido comprometida llevará a la base de datos a un nuevo estado consistente que debe permanecer incluso si hay un fallo en el sistema. La ejecución de una transacción debe conducir a un estado de la base de datos consistente (que cumple todas las restricciones de integridad definidas). Los algoritmos de control de concurrencia deben sincronizar la ejecución de transacciones concurrentes bajo el criterio de correctitud. Abortada (Rolled Back): después de haber retrocedido la transacción y restablecido la base de datos a su estado anterior al comienzo de la transacción.30 pierde la integridad también se pierde la consistencia. se requieren protocolos para la recuperación local y para efectuar los compromisos (commit) globales. Si se anula los cambios que ha efectuado son deshechos. Aspectos relacionados al procesamiento de transacciones Los siguientes son los aspectos más importantes relacionados con el procesamiento de transacciones: • Modelo de estructura de transacciones. Si se anula los cambios que ha efectuado son deshechos. Fallida (Failed): tras descubrir que no se puede continuar la ejecución normal. En transacciones distribuidas es necesario introducir medios de comunicación entre los diferentes nodos de una red para garantizar la atomicidad y durabilidad de las transacciones. En cualquier momento una transacción sólo puede estar en uno de los siguientes estados. • Algoritmos de control de concurrencia.3 NIVELES DE AISLAMIENTO . la transacción permanece en este estado durante su ejecución.

como las lecturas desfasadas o ficticias. Niveles de aislamiento: . • Si una operación de lectura que hace referencia a filas modificadas por otra transacción: ✔ Se bloquea hasta que se libera el bloqueo exclusivo de la fila. Es interesante notar que el estándar SQL no impone un esquema de cierre específico o confiere por mandato comportamientos particulares. pero podría usarse una versión anterior de un registro. Por lo tanto. Los niveles de aislamiento se describen en cuanto a los efectos secundarios de la simultaneidad que se permiten. • Duración de los bloqueos de lectura. El estándar ANSI/ISO SQL define cuatro niveles de aislamiento transaccional en función de tres eventos que son permitidos o no dependiendo del nivel de aislamiento. ✔ Recupera la versión confirmada de la fila que existía en el momento en el que empezó la instrucción o la transacción. Estos eventos son: Lectura sucia. Control de los niveles de aislamiento de transacción: • Controla si se realizan bloqueos cuando se leen los datos y qué tipos de bloqueos se solicitan.31 Las transacciones especifican un nivel de aislamiento que define el grado en que se debe aislar una transacción de las modificaciones de recursos o datos realizadas por otras transacciones. las lecturas no son consistentes al usar este nivel de aislamiento. que dependen del evento de lectura. Una transacción vuelve a leer datos que previamente había leído y encuentra que han sido modificados o eliminados por una transacción cursada. devolviendo un conjunto de registros que satisfacen una condición de búsqueda y encuentra que otros registro que satisfacen la condición han sido insertadas por otra transacción cursada. Lectura fantasma. Una transacción vuelve a ejecutar una consulta. Los niveles de aislamiento SQL son definidos basados en si ellos permiten a cada uno de los eventos definidos anteriormente. ✔ Lee la modificación de los datos no confirmados. pero más bien describe estos niveles de aislamiento en términos de estos teniendo muchos mecanismos de cierre/coincidencia. Las sentencias SELECT son ejecutadas sin realizar bloqueos. • • Lectura no repetible.

SQL Server permite todos Secuenciable No No No estos niveles. A mayor grado de aislamiento. El nivel de aislamiento para una sesión SQL establece el comportamiento de los bloqueos para las instrucciones SQL. pero podría usarse una versión anterior de un registro.32 Comportamiento permitido Nivel de aislamiento Lectura Sucia No repetible Fantasma Sí Sí No Sí Sí Sí Lectura no comprometida Sí Lectura comprometida Lectura repetible No No Según el estándar SQL. pero una instrucción rollback transaction que utilice este nombre sólo revierte las transacciones realizadas hasta la instrucción save transaction más reciente que también utilice este nombre. las lecturas no son consistentes al usar este nivel de aislamiento. mayor precisión. Los niveles se pueden establecer en ambos para cada transacción. En una transacción se permiten nombres de puntos de almacenamiento duplicados. Por lo tanto. la lectura comprometida "READ COMMITTED" no regresa resultados consistentes. En ambos casos. En la definición SQL estándar. rollback transaction disminuye la función del sistema @@trancount a 0. 4.4 INSTRUCCIONES COMMIT Y ROLLBACK Rollback transaction sin savepoint_name o transaction_name revierte todas las instrucciones hasta el principio de la transacción. . Sin embargo esto no es necesariamente cierto. en la lectura no comprometida "READ UNCOMMITTED" las sentencias SELECT son ejecutadas sin realizar bloqueos. Una transacción no se puede revertir después de ejecutar una instrucción commit transaction. Cuando se trata de transacciones anidadas. Rollback transaction no puede hacer referencia a un savepoint_name en transacciones distribuidas que se iniciaron explícitamente con begin distributed transaction o que se escalaron a partir de una transacción local. Oracle sólo permite la lectura comprometida y secuenciable. mientras que rollback transaction con savepoint_name no disminuye @@trancount. Una instrucción rollback transaction que especifica un savepoint_name no libera ningún bloqueo. Las lecturas repetibles "REPEATABLE READ" es el nivel de aislamiento que garantiza que un query un resultado consistente. esta misma instrucción revierte todas las transacciones internas hasta la instrucción begin transaction más externa. El estándar SQL trataba de establecer los niveles de aislamiento que permitirían a varios grados de consistencia para querys ejecutadas en cada nivel de aislamiento. pero a costa de menor concurrencia.

la instancia utiliza una confirmación interna en dos fases para confirmar todas las bases de datos involucradas en la transacción.33 Si se emite la instrucción ROLLBACK TRANSACTION en un desencadenador: • • Se revierten todas las modificaciones de datos realizadas hasta ese punto de la transacción actual. • COMMIT TRANSACTION Si la transacción que se ha confirmado era una transacción Transact-SQL distribuida. Tampoco se ejecutan las instrucciones del lote después de la instrucción que activó el desencadenador. no los datos. Cada commit transaction que se ejecute cuando @@trancount sea mayor que 1 sólo reduce @@trancount en 1. no se revierten las modificaciones. también se le puede considerar una tabla virtual. Los datos que se recuperan mediante una consulta a una vista se presentarán igual que los de una tabla. Cuando @@trancount llega a 0. Las modificaciones sobre los datos sólo quedan permanentes y se liberan los recursos cuando se confirma la transacción más externa. Si una transacción local afecta a dos o más bases de datos de la misma instancia del Database Engine (Motor de base de datos). UNIDAD 5 VISTAS Una vista de base de datos es un resultado de una consulta SQL de una o varias tablas. se confirma la transacción externa entera. Las vistas tienen la misma estructura que una tabla: filas y columnas. las confirmaciones de las transacciones anidadas no liberan recursos ni hacen permanentes sus modificaciones. la ejecución de una instrucción commit transaction que haga referencia al nombre de una transacción externa cuando haya transacciones internas pendientes sólo reduce @@trancount en 1. La única diferencia es que sólo se almacena de ellas la definición. COMMIT TRANSACTION hace que MS DTC utilice el protocolo de confirmación en dos fases para confirmar los servidores involucrados en la transacción. El desencadenador continúa la ejecución del resto de las instrucciones después de la instrucción ROLLBACK. incluidas las que realizó el desencadenador. De hecho. si no se sabe que se está . Cuando se utiliza en transacciones anidadas. Como database engine (motor de base de datos) omite transaction_name. Si alguna de estas instrucciones modifica datos. La ejecución de las instrucciones restantes no activa ningún desencadenador anidado.

• Las vistas pueden proporcionar un nivel adicional de seguridad. Creando una • . actualizar. Los datos que se recuperan mediante una consulta a una vista se presentarán igual que los de una tabla. La información de dos o más tablas puede recperarse utilizando una combinación de dos o más tablas. nada hace suponer que es así. si no se sabe que se está trabajando con una vista. Las actualizaciones se transfieren a la/s tabla/s original/es (con ciertas limitaciones). Una BD se compone de muchas tablas. Las vistas permiten ocultar la complejidad de los datos. De hecho.1 DEFINICIÓN Y OBJETIVO DE LAS VISTAS Una vista en SQL es el resultado de una consulta de varias tablas que te aparece como una sola tabla. en algunas condiciones existen restricciones para realizar el resto de las operaciones sobre vistas. borrar y seleccionar datos en una vista. Una vista es como una ventana a través de la cual se puede consultar o cambiar información de la tabla a la que está asociada. Aunque siempre es posible seleccionar datos de una vista. Por ejemplo. Aunque siempre es posible seleccionar datos de una vista. y estas combinaciones pueden llegar a ser muy confusas. La siguiente sentencia produce la creación de la vista de los empleados del departamento de administración (cod_dep=100). Una vista es una tabla virtual (no tiene una correspondencia a nivel físico) Se puede consultar como cualquier tabla básica. se pueden insertar. Sobre un conjunto de tablas relacionales se puede trabajar con un número cualquiera de vistas. Las vistas tienen la misma estructura que una tabla: filas y columnas. se pueden insertar. Al igual que sucede con una tabla. nada hace suponer que es así. La única diferencia es que sólo se almacena de ellas la definición. borrar y seleccionar datos en una vista. 5. actualizar. Una vista se especifica a través de una expresión de consulta (una sentencia SELECT) que la calcula y que puede realizarse sobre una o más tablas. cada responsable de departamento sólo tendrá acceso a la información de sus empleados. Al igual que sucede con una tabla. no los datos.34 trabajando con una vista. Una vista se caracteriza porque: • • • • –Se considera que forma parte del esquema externo. en la tabla de empleados. en algunas condiciones existen restricciones para realizar el resto de las operaciones sobre vistas.

Una vista es esencialmente una consulta almacenada que devuelve un conjunto de resultados y a la que se le pone un nombre.35 vista como resultado de la combinación se puede ocultar la complejidad al usuario. o que tengan una visión de la misma con una estructura diferente a la del esquema que realmente está almacenado. el lenguaje SQL permite definir vistas. aparece como una tabla más del esquema. La única diferencia es que sólo se almacena de ellas la definición. aunque realmente no lo es. no los datos. en algunas condiciones existen restricciones para Las vistas son útiles: • Proporcionan un poderoso mecanismo de seguridad.2 INSTRUCCIONES PARA LA ADMINISTRACIÓN DE VISTAS Muchas bases de datos relacionales que se utilizan en aplicaciones del mundo real tienen esquemas complejos y formados por muchas tablas. Aunque siempre es posible seleccionar datos de una vista. Precisamente para estos casos. 5. si no se sabe que se está trabajando con una vista. Al igual que sucede con una tabla. ocultando partes de la base de datos a ciertos usuarios. Los datos que se recuperan mediante una consulta a una vista se presentarán igual que los de una tabla. • Las vistas tienen la misma estructura que una tabla: filas y columnas. En ocasiones. nada hace suponer que es así. Las vistas ayudan a mantener unos nombres razonables. El usuario no sabrá que existen aquellos atributos que se han omitido al definir una vista. Una vista es una “tabla virtual”. se pueden insertar. De hecho. Sintaxis La sintaxis general para crear una vista es la siguiente: CREATE VIEW view_name [(column_list)] AS sentencia_select UNIDAD 6 . borrar y seleccionar datos en una vista. es conveniente que algunos grupos o perfiles de usuarios tengan una vista parcial de ese esquema. actualizar.

dominios y otros integrantes (como concesiones de autorización) que describen el esquema. en él podemos gestionar quién tiene acceso al servidor y quién no. Para que esto ocurra tendremos que irle concediendo o denegando permisos sobre cada uno de los objetos que la componen. podemos asignar un nombre y un identificador de autorización de esquema y definir dichos elementos más adelante. Un esquema se crea mediante la sentencia CREATE SCHEMA. El que alguien tenga acceso al servidor no quiere decir que pueda acceder a las bases de datos que se encuentran en él.1 ESQUEMAS DE AUTORIZACIÓN Un esquema SQL se identifica con un nombre de esquema. • • En SQL Server nos encontramos con tres niveles o capas en los cuales podemos gestionar la seguridad. Para que alguien pueda acceder al servidor debe tener un inicio de sesión (login) asignado. y los revoca mediante la orden REVOKE. Como alternativa. y además gestionamos que roles va a desempeñar. y a éste se asignaremos los roles o funciones que puede realizar sobre el servidor. ni a cada uno de los objetos que la componen. Deberemos crear un usuario en cada una de las bases de datos a las que queramos que acceda un login. vistas. además de los descriptores de cada elemento del esquema. 6. los privilegios se asignan del siguiente modo: • Un usuario que crea una tabla o cualquier otro objeto de la base de datos es el propietario y se le garantizan automáticamente todos los privilegios aplicables a dicho objeto. Un usario que tenga un privilegio y posea además sobre él el privilegio de concesión puede asignarle tal pricilegio a otro usuario y pasarle también el privilegio de concesión. y consta de un identificador de autorización que indica el usuario o la cuenta propietaria del esquema. Los privilegios los concede quien tiene el permiso (es decir el propietario del objeto y quien tiene el privilegio de concesión) mediante la orden GRANT.36 SEGURIDAD La ejecución de una operación en los datos de la base de datos por parte de un usuario está supeditada a la posesión por parte del usuario de los privilegios necesarios para la operación concreta ejecutada en el conjunto de datos específico. Para ello hay que tener acceso a la siguiente barrera de seguridad. Análogamente. con la posibilidad de darles también a otros usuarios dichos privilegios (privilegio de concesión). . Los elementos del esquema comprenden tablas. Para que un login tenga acceso a una base de datos. tenemos que crear en ella un usuario (user). el que un usuario tenga acceso a una base de datos no quiere decir que tenga acceso a todo su contenido. En general. que puede contener todas las definiciones de elementos del esquema. restricciones. El primero de ellos se encuentra a nivel de servidor. que es a nivel de base de dato.

SQL2 emplea el concepto de catálogo o diccionario de datos DD (colección nombrada de esquemas). sólo si dichas relaciones existen en esquemas dentro del mismo catálogo. como la integridad referencial. que proporciona a los usuarios autorizados información sobre todos los descriptores de elementos de todos los esquemas del catálogo. Esta base de datos y el sistema de control de acceso se discuten extensivamente en que puede consultar para más detalles. Grant permite al creador de un objeto el dar permisos específicos a todos los usuarios (public) o a un cierto usuario o grupo. Si las tablas de permisos tienen registros de permisos que contienen nombres de tablas o bases de datos con mayúsculas y minúsculas y la variable de sistema lower_case_table_names está activa. Es necesario manipular las tablas de permisos directamente. Además. Tipos de Autorización para la modificación del esquema de datos: • Autorización de índices Permite creación y borrado de índices • Autorización de recursos Permite la creación de relaciones nuevas • Autorización de alternación Permite el añadido o el borrado de atributos de las relaciones • Autorización de eliminación Permite el borrado de relaciones 6. La información de cuenta de MySQL se almacena en las tablas de la base de datos mysql .2 INSTRUCCIONES GRANT Y REVOKE Los comandos GRANT y REVOKE permiten a los administradores de sistemas crear cuentas de usuario MySQL y darles permisos y quitarlos de las cuentas. como las definiciones de dominio. Se pueden definir restricciones de integridad entre relaciones. los esquemas del mismo catálogo pueden compartir ciertos elementos. Usuarios distintos al . REVOKE no puede usarse para quitar los permisos.37 Además del concepto de esquema. Un catálogo siempre contiene un esquema especial llamado INFORMATION_SCHEMA.

• ALL Otorga todos los privilegios• object El nombre de un objeto al que se quiere conceder el acceso. • CHANGE Mensaje devuelto se la acción se ha realizado satisfactoriamente. UNIDAD 7 INTRODUCCIÓN AL SQL PROCEDURAL El SQL PL es. En la actual versión. el creador obtiene automáticamente todos los privilegios. • username El nombre de un usuario al que se quiere conceder privilegios. Insert inserta datos en todas las columnas de una tabla específica. • GROUP group Un grupo al que se otorgan privilegios. Los posibles objetos son: tabla vista secuencia indice • PUBLIC Una abreviación para representar a todos los usuarios. tiene posibilidad de ejecutar ese privilegio. FOR. Una vez que un usuario tiene privilegios sobre un objeto. El SQL PL es un lenguaje de programación de alto nivel con una sintaxis sencilla y sentencias habituales de control de programación. No hay necesidad de conceder privilegios al creador de un objeto. una vez que el objeto ha sido creado.38 creador pueden no tener permisos de acceso a menos que el creador se los conceda. así como otras sentencias. WHILE. • ERROR: Change Acl: class “object” not found Mensaje devuelto si el objeto especificado no está disponible o si es imposible dar los provilegios a grupo o usuarios especificado. Delete elimina filas de una tabla específica. Procedimientos de SQL PL y de SQL. y puede también eliminar el objeto. el grupo debe haber sido creado explícitamente como se describe más adelante. ITERATE y GOTO. Privilege los posibles privilegios son: select acceso a todas las columnas de una tabla/vista específica. PUBLIC es una abreviatura para representar a todos los usuarios. Los procedimientos de SQL PL pueden contener parámetros. • RULE Define las reglas de la tabla(vista (cer sentencia CREATE RULE). un subconjunto del SQL que proporciona construcciones de procedimiento que se pueden utilizar para implementar la lógica alrededor de las sentencias de SQL tradicionales. variables. en realidad. sentencias de control de SQL PL y sentencias de SQL compuestas. que incluyen las sentencias IF. Update actualiza todas las columnas de una tabla específica. ELSE. sentencias de asignación. Los procedimientos de SQL PL también dan soporte a un .

colocando en línea el cuerpo de la función en la consulta que la utiliza. surgen algunas consideraciones relativas al rendimiento y se deben tener en cuenta cuando planifique si ha de implementar la lógica de procedimiento en SQL PL en un procedimiento o utilizar el SQL PL en línea. una función de SQL PL en línea se implementa. . De esta diferencia. Si le interesa una lógica más compleja que requiera parámetros. pueden convenirle más los procedimientos y las funciones de SQL. el cual usualmente corre en un servidor separado. le permite agrupar varias sentencias de SQL en un bloque lógico atómico pequeño. y pueden contener elementos de SQL PL. está soportado un subconjunto de SQL PL en los cuerpos de los activadores y las funciones de SQL. en el cual puede declarar variables y elementos para el manejo de condiciones. Su implementación varía de un manejador de bases de datos a otro. posee acceso directo a los datos que necesita manipular y sólo necesita enviar sus resultados de regreso al usuario. DB2 compila estas sentencias como una sola sentencia de SQL. Dentro de una sentencia dinámica compuesta. Mientras que un procedimiento de SQL PL se implementa compilando estáticamente sus consultas de SQL individuales en secciones de un paquete. La ventaja de un procedimiento almacenado es que al ser ejecutado. es ejecutado directamente en el motor de bases de datos. pase de conjuntos de resultados u otros elementos de procedimiento más avanzados. a las llamadas anidadas y repetitivas y a la devolución de varios conjuntos de resultados al llamante o a la aplicación cliente. Como tal. Para conocer el conjunto completo de elementos del lenguaje soportado en los procedimientos de SQL PL. en respuesta a una petición de usuario. en realidad. Funciones. deshaciéndose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes. pero con un flujo de datos significativo. Las sentencias dinámicas compuestas son útiles para crear scripts reducidos que realicen pequeñas unidades de trabajo lógico con un mínimo flujo de control. La palabra en línea hace resaltar una diferencia importante entre el SQL PL en línea y el lenguaje SQL PL completo.39 potente mecanismo de manejo de errores y condiciones.1 PROCEDIMIENTOS ALMACENADOS Un procedimiento almacenado (stored procedure en inglés) es un programa (o procedimiento) el cual es almacenado físicamente en una base de datos. es posible incluir el subconjunto de SQL PL conocido como SQL PL en línea y tan sólo un pequeño conjunto de sentencias de SQL básicas. 7. como su nombre sugiere. Una sentencia dinámica compuesta es una sentencia que. activador y sentencias dinámicas compuestas de SQL PL en línea y de SQL A partir de DB2 Versión 7.2. Este subconjunto de SQL PL se conoce como SQL PL en línea. vea la sentencia CREATE PROCEDURE (SQL) en la Consulta de SQL.

Podemos ver un claro ejemplo de estos procedimientos cuando requerimos realizar una misma operación en un servidor dentro de algunas o todas las bases de datos y a la vez dentro de todas o algunas de las tablas de las bases de datos del mismo. pero no siempre. el motor de base de datos puede asegurar la integridad de los datos y la consistencia. Al incluir la lógica de la aplicación en la base de datos utilizando procedimientos almacenados. Otro uso común es la 'encapsulación' de un API para un proceso complejo o grande que podría requerir la 'ejecución' de varias consultas SQL. Un procedimiento almacenado permite agrupar en forma exclusiva parte de algo específico que se desee realizar o. También pueden ser usados para el control de gestión de operaciones. Los usos 'típicos' de los procedimientos almacenados se aplican en la validación de datos. con la ayuda de procedimientos almacenados. . mejor dicho.40 Usos típicos para procedimientos almacenados incluyen la validación de datos siendo integrados a la estructura de base de datos (los procedimientos almacenados utilizados para este propósito a menudo son llamados disparadores. Para ello podemos utilizar a los Procedimientos almacenados auto creable que es una forma de generar ciclos redundantes a través de los procedimientos almacenados. triggers en inglés). que pueden simplificar la gestión de datos y reducir la necesidad de codificar la lógica en el resto de los programas cliente. De este modo. tales como la manipulación de un 'dataset' enorme para producir un resultado resumido. El servidor de la base de datos tiene acceso directo a los datos necesarios para manipular y sólo necesita enviar el resultado final al usuario. por ejemplo. y ejecutar procedimientos almacenados dentro de una transacción de tal manera que las transacciones sean efectivamente transparentes para ellos. para realizar consultas SQL sobre los objetos del banco de datos de una manera abstracta. Los procedimientos almacenados usados con tal propósito se llaman comúnmente disparadores. un programa corriendo en el sistema cliente y comunicándose con la base de datos mediante el envío de consultas SQL y recibiendo sus resultados. El último ejemplo generalmente ejecutará más rápido como un procedimiento almacenado que de haber sido implementado como. la necesidad de embeber la misma lógica en todos los programas que acceden a los datos es reducida. o triggers. en respuesta a una petición de usuario. Esto puede simplificar la creación y. Los procedimientos pueden ser ventajosos: Cuando una base de datos es manipulada desde muchos programas externos. el SQL apropiado para dicha acción. o encapsular un proceso grande y complejo. lo cual corre generalmente en un servidor separado de manejador de bases de datos aumentando con ello. la rapidez de procesamiento de requerimientos del manejador de bases de datos. está directamente bajo el control del motor del manejador de bases de datos. Estos procedimientos. La ventaja de un procedimiento almacenado. desde el punto de vista del cliente de la aplicación. el mantenimiento de los programas involucrados. integrados dentro de la estructura del banco de datos. particularmente. se usan a menudo. Esto puede reducir la probabilidad de que los datos sean corrompidos por el uso de programas clientes defectuosos o erróneos. Los procedimientos almacenados pueden permitir que la lógica del negocio se encuentre como un API en la base de datos.

col2. y el trigger existe. previene errores de datos. Si se omite. etc.41 Algunos afirman que las bases de datos deben ser utilizadas para el almacenamiento de datos solamente.]} ON table [REFERENCING OLD AS oldname. que se ejecuta cuando una determinada instrucción en SQL se va a ejecutar sobre dicha tabla. el trigger solo actuará. .com/es/sitemap. pueden generar valores de columnas. El modificador FOR EACH ROW indica que el trigger se disparará cada vez que se desee hacer operaciones sobre una fila de la tabla.com. a través de aplicaciones cliente que deban acceder a los datos. se establece una restricción. . . actualización (UPDATE) o borrado (DELETE).programatium. La sintaxis para crear un trigger es la siguiente: CREATE [OR REPLACE] TRIGGER {BEFORE|AFTER} {DELETE|INSERT|UPDATE [OF col1. .1keydata.hostoi. BIBLIOGRAFÍA http://www. 7. .paginasprodigy.. NEW as newname] [FOR EACH ROW [WHEN (condition)]] pl/sql_block El uso de OR REPLACE permite sobreescribir un trigger existente.mx/evaristopacheco/taller . sincroniza tablas.php? option=com_content&view=article&id=70&Itemid=91 http://sql. colN] [OR {DELETE|INSERT|UPDATE [OF col1. sobre las filas que satisfagan la restricción. . col2.2 DISPARADORES (TRIGGERS) Un trigger (o disparador) en una Base de datos.htm http://tallerbd. . Sin embargo. Permite implementar programas basados en paradigma lógico (sistemas expertos. y que la lógica de negocio sólo debería ser aplicada en la capa de negocio de código.com/tutoriales/cursos/oracle/11. deducción).php http://www. modifica valores de una vista.com/index. es un procedimiento que se ejecuta cuando se cumple una condición establecida al realizar una operación de inserción (INSERT). el uso de procedimientos almacenados no se opone a la utilización de una capa de negocio. . colN].. Además. Un trigger es un bloque PL/SQL asociado a una tabla. un error. Son usados para mejorar la administración de la Base de datos. se producirá. sin necesidad de contar con que el usuario ejecute la sentencia de SQL. Si se acompaña del modificador WHEN.

org/wiki/ .42 http://es.wikipedia.

Sign up to vote on this title
UsefulNot useful