Sunteți pe pagina 1din 20

UNIVERSIDAD NACIONAL

SANTIAGO ANTNEZ DE MAYOLO


FACULTAD DE CIENCIAS

ESCUELA PROFECIONAL DE
INGENIERA DE SISTEMAS E INFORMTICA

SEMESTRE 2015 I
PROGRAMACIN III

TRANSACCIONES

DOCENTE

: ING. GONZALES RAMOS, Carlos

Alberto
ALUMNO

: HUAMAN CAMONES, Clinton Yeferson


HUARAZ PERU
2015

INTRODUCCIN
Una Base de Datos Transaccional alberga la idea de o todo o mejor nada. Al
ejecutar una transaccin, el motor de base de datos nos garantizar la
atomicidad, consistencia, aislamiento y durabilidad (ACID) de la transaccin (o
conjunto de comandos) que se utilice.
El siguiente trabajo monogrfico consta de dos captulos, en la primera parte
definiremos todo referido a transacciones y en la segunda parte mostraremos
ejemplos con transacciones.

Contenido
INTRODUCCIN.............................................................................................. 2
I.

TRANSACCIONES..................................................................................... 4
1.1.

DEFINICIN........................................................................................ 4

1.2.

PROBLEMAS DE DONDE SURGE TRANSACCIONES.............................4

1.3.

SOLUCIONANDO PROBLEMAS............................................................5

1.4.

PROPIEDADES DE UNA TRANSACCIN...............................................6

1.4.1.

Atomicidad.................................................................................... 6

1.4.2.

Consistencia.................................................................................. 6

1.4.3.

Aislamiento (Isolated)......................................................................7

1.4.4.

Durabilidad.................................................................................... 7

1.5.

COMANDOS DE CONTROL DE TRANSACCIONES.................................8

1.5.1.
1.6.
II.

NOTA........................................................................................... 9

ESPECIFICAR UN NIVEL DE AISLAMIENTO...........................................9

DESARROLLO DE TRANSACCIONES.......................................................11
2.1.

CREAR UNA INSTRUCCIN SET TRANSACTION.................................11

2.3.

PASO A PASO.................................................................................... 13

2.4.

MS EJEMPLOS................................................................................ 15

2.5.

EJEMPLO COMPLETO DE TRANSACCIONES......................................18

Bibliografa................................................................................................... 20

TRANSACCIONES
I.TRANSACCIONES
I.1.

DEFINICIN
Una transaccin es una unidad lgica de trabajo o procesamiento
(ejecucin de un programa que incluye operaciones de acceso a la
base de datos). Una transaccin es una secuencia de operaciones
que llevan la base de datos desde un estado de consistencia a otro
estado de consistencia, por esto suele decirse tambin que la
transaccin es una unidad lgica de integridad. Cuando mltiples
transacciones son introducidas en el sistema por varios usuarios, es
necesario evitar que interfieran entre ellas de forma tal que
provoquen que la BD quede en un estado no consistente; desde este
punto de vista, podemos ver una transaccin como una unidad
lgica de concurrencia. Cuando ocurre un fallo que provoca la cada
del sistema, en el momento en el que haba varias transacciones en
curso de ejecucin, muy probablemente dejar errneos los datos en
la BD (estado inconsistente); en estas circunstancias, se debe
garantizar que la BD pueda ser recuperada a un estado en el cual su
contenido sea consistente, por esto una transaccin es considerada
tambin una unidad lgica de recuperacin.

I.2.

PROBLEMAS DE DONDE SURGE TRANSACCIONES


Relativamente, existen muy pocas bases de datos en las cuales
solamente un usuario est intentando acceder a los datos
contenidos en ellas en algn momento dado. La mayora de las
veces, las bases de datos son utilizadas por diferentes tipos de
usuarios para muy distintos propsitos, y a menudo estos usuarios
estn intentando acceder a los datos al mismo tiempo. Mientras
mayor sea el nmero de usuarios, mayor ser la probabilidad de que
existan problemas cuando los usuarios intenten ver o modificar los
mismos datos en el mismo momento. Sin embargo, dependiendo de
la naturaleza de las operaciones, los problemas pueden surgir

15

TRANSACCIONES
incluso si solamente dos usuarios estn accediendo a los datos al
mismo tiempo. Por ejemplo, un usuario pudiera estar viendo los
datos en una tabla, tomar cierto tipo de accin basada en esos
datos, y luego arrojarlos a la tabla para verificar los datos una vez
ms. Sin embargo, si otro usuario actualiza la tabla entre los dos
momentos que el primer usuario la visualiza, el primer usuario
encontrar datos diferentes la segunda vez que lo hace, y pudiera
incluso notar que la accin tomada por el segundo usuario invalid
los cambios que ambos hicieron despus de haber visto la tabla por
primera vez. Por ejemplo, el primer usuario pudiera haber notado
que el nmero telefnico de un cliente es incorrecto y quisiera aplicar
la correccin. Sin embargo, un segundo usuario pudiera estar
buscando los datos del mismo cliente, y mientras ste actualiza el
estatus del crdito del cliente, pudiera sin darse cuenta regresar el
anterior nmero telefnico al registro de la base de datos (debido a
que los datos que se estaban buscando contenan el nmero
anterior), sobrescribiendo los cambios que realiz el primer usuario.

I.3.

SOLUCIONANDO PROBLEMAS
Para encargarse de este tipo de inconsistencias en los datos
mencionados en los problemas, se utiliza transacciones para
controlar las acciones de los usuarios individuales. Una transaccin
es una unidad de trabajo que se compone de una o ms
instrucciones que realizan un conjunto de acciones relacionadas. Por
ejemplo, la aplicacin podra utilizar una transaccin para cambiar el
nmero de CD de las existencias. El proceso de actualizar la tabla o
tablas aplicables y reportar la informacin actualizada de regreso al
usuario es tratado como una sola transaccin. La transaccin puede
incluir varias instrucciones, realizando cada una de ellas una tarea
especfica.

15

TRANSACCIONES
I.4.

PROPIEDADES DE UNA TRANSACCIN


Para que un conjunto de acciones califique como una transaccin,
debe pasar la prueba ACID. ACID es el acrnimo comnmente
utilizado para referirse a los nombres en ingls de las cuatro
caractersticas de una transaccin (Atomic, Consistent, Isolated y
Durable, respectivamente) que veremos a continuacin:

I.4.1. Atomicidad
Esta caracterstica se refiere a la naturaleza todo-o-nada de
una transaccin. Se realizan ya sea todas las operaciones en
una transaccin, o ninguna de ellas. Aunque algunas
instrucciones sean ejecutadas, los resultados de stas
regresan a su punto inicial si la transaccin falla en cualquier
punto antes de ser completada. Solamente cuando todas las
instrucciones se ejecutan apropiadamente y todas las
acciones se realizan, se considera completa una transaccin y
sus resultados se aplican a la base de datos.

I.4.2. Consistencia
La base de datos debe ser consistente al inicio y al final de la
transaccin. De hecho, se puede considerar una transaccin
como un conjunto de acciones que lleva a la base de datos de
un estado consistente a otro. Todas las reglas que definen y
limitan los datos deben ser aplicadas a esos datos como
resultado de cualquier cambio que ocurra durante la
transaccin. Adems, todas las estructuras dentro de la base
de datos deben estar correctas al final de la transaccin.

15

TRANSACCIONES
I.4.3. Aislamiento (Isolated)
Los

datos

que

pudieran

encontrarse

en

un

estado

inconsistente temporalmente durante una transaccin no


debern estar disponibles a otras transacciones hasta que los
datos sean consistentes una vez ms. En otras palabras,
ningn usuario deber ser capaz de acceder a los datos
inconsistentes durante una transaccin implementada por otro
usuario cuando los datos impactados por esa transaccin
estn en un estado inconsistente. Adems, cuando una
transaccin se encuentra aislada, ninguna otra transaccin
puede afectarla.

I.4.4. Durabilidad
Una vez que los cambios hechos en una transaccin sean
completados, esos cambios debern ser preservados, y los
datos debern estar en un estado confiable y consistente,
incluso si ocurren errores de aplicacin o de hardware.

Si surge cualquier problema en cualquier momento durante una


transaccin, la transaccin completa regresa a su punto inicial y la
base de datos regresa al estado en que se encontraba antes de que
la transaccin iniciara. Cualquier accin que se tome es cancelada y
los datos se restauran a su estado original. Si la transaccin se
completa

exitosamente,

entonces

todos

los

cambios

son

implementados. A travs de todo el proceso, la transaccin siempre


asegura la integridad de la base de datos, sin importar si la
transaccin fue completada exitosamente o debi regresar a su
punto inicial. SQL soporta diferentes instrucciones relacionadas con
el proceso de transaccin. Estas transacciones pueden ser utilizadas
para iniciar y finalizar transacciones, configurar sus propiedades,
aplazar la ejecucin de las restricciones durante la transaccin e

15

TRANSACCIONES
identificar los puntos dentro de una transaccin que actan como
puntos de recuperacin cuando las transacciones vuelven a su punto
inicial. En el resto de este captulo examinaremos cmo se utiliza
cada una de estas instrucciones dentro de una transaccin. Sin
embargo, antes de ir a una discusin ms detallada de las
instrucciones, sera mejor proporcionar un breve repaso de cada una
de ellas para tener un mejor entendimiento de cmo funcionan las
transacciones.

I.5.

COMANDOS DE CONTROL DE TRANSACCIONES


Los comandos de control de transacciones manejan de forma
explcita los cambios realizados por comandos.
COMANDO
COMMIT

PROPSITO
Hacer permanentes los cambios realizados por
las sentencias ejecutadas en la transaccin
actual, y establecer el comienzo de una nueva
transaccin.
Finaliza una transaccin y reinvierte todos los

ROLLBACK

cambios al comienzo de la transaccin o a un

SAVEPOINT

punto de recuperacin.
Establecer un punto hasta el cual se podr

SET

deshacer cambios.
Establecer propiedades para la transaccin

TRANSACTION
START

actual.
Configura las propiedades de una transaccin e

TRANSACTION

inicia esa transaccin.


Determina el modo de restriccin dentro de una
transaccin actual. El modo de restriccin se

SET
CONSTRAINTS

refiere

si

una

restriccin

es

aplicada

inmediatamente a los datos cuando stos son


modificados o si la aplicacin de la restriccin
es aplazada hasta un punto posterior en la
transaccin.

15

TRANSACCIONES
Las instrucciones SQL relacionadas con las transacciones: SET
TRANSACTION, START TRANSACTION, COMMIT y ROLLBACK.
Si se utiliza una instruccin SET TRANSACTION, sta se ejecuta
antes de que la transaccin inicie. Despus de eso, una instruccin
START TRANSACTION inicia la transaccin.
I.5.1. NOTA
Cuando se inicia la transaccin, la base de datos se
encuentra en su estado original (los datos son consistentes y
correctos). Despus se procesan las instrucciones SQL dentro
de la transaccin. Si este proceso es exitoso, se ejecuta una
instruccin COMMIT. La instruccin COMMIT provoca que la
implementacin SQL actualice la base de datos y finalice la
transaccin. Si el proceso de ejecucin de la instruccin no es
exitoso, se ejecuta

una instruccin ROLLBACK y la

implementacin regresa la base de datos a su estado original.


Una ejecucin no exitosa no significa necesariamente que las
instrucciones hayan fallado. Una instruccin ROLLBACK
puede ser ejecutada de acuerdo con las condiciones de una
clusula WHERE, un error predefinido, o por cualquier otra
condicin que sea definida dentro de la transaccin. El punto
es que, bajo ciertas circunstancias, se ejecuta la instruccin
ROLLBACK, y bajo otras circunstancias se ejecuta la
instruccin COMMIT.

I.6.

ESPECIFICAR UN NIVEL DE AISLAMIENTO


Cuando se crea una instruccin SET TRANSACTION, se pueden
especificar los niveles de aislamiento cero o uno. Un nivel de
aislamiento define cmo sera aislar una transaccin desde las
acciones

de

otras

transacciones.

Una

instruccin

SET

TRANSACTION soporta cuatro opciones del nivel de aislamiento:


READ UNCOMMITTED

15

TRANSACCIONES
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
Los niveles de aislamiento estn enlistados del menos restrictivo al
ms restrictivo, siendo la opcin READ UNCOMMITTED la menos
efectiva en trminos de aislar los datos, y la opcin SERIALIZABLE
la ms efectiva. Si no se especifica ningn nivel de aislamiento, se
asume SERIALIZABLE de manera preestablecida.

II.

DESARROLLO DE TRANSACCIONES

15

TRANSACCIONES
II.1.

CREAR UNA INSTRUCCIN SET TRANSACTION


Ahora que hemos visto los diferentes componentes de la instruccin
SET TRANSACTION, demos un vistazo a un par de ejemplos. El
primer ejemplo define una transaccin con un nivel de acceso READ
ONLY, un nivel de aislamiento READ UNCOMMITTED y un tamao
de diagnstico de 5:
SET TRANSACTION
READ ONLY,
ISOLATION LEVEL READ UNCOMMITTED,
DIAGNOSTICS SIZE 5;
Los modos de transaccin estn separados por comas tambin que
la opcin del nivel de aislamiento incluye las palabras clave
ISOLATION LEVEL, y que la opcin del tamao de diagnstico
incluye las palabras clave DIAGNOSTICS SIZE. La transaccin est
configurada con el nivel de aislamiento restrictivo ms bajo, y sta es
la razn de que el nivel de acceso debe ser READ ONLY. No es
posible definir un nivel de acceso READ WRITE para esta
instruccin. Debido a que el nivel de aislamiento es READ
COMMITTED, la instruccin no tiene que especificar el nivel de
acceso READ ONLY (debido a que ya es asumido). Sin embargo, el
incluirlo no causa ningn problema y documenta el cdigo de mejor
manera. En el siguiente ejemplo, la instruccin SET TRANSACTION
define una transaccin con un nivel de acceso READ WRITE, un
nivel de aislamiento SERIALIZABLE y un tamao de diagnstico de
8:
SET TRANSACTION
READ WRITE,
ISOLATION LEVEL SERIALIZABLE,
DIAGNOSTICS SIZE 8;

II.2.

INICIAR UNA TRANSACCIN

15

TRANSACCIONES
Una transaccin puede ser iniciada ya sea implcita o explcitamente.
Una transaccin inicia implcitamente cuando ciertos tipos de
instrucciones SQL son ejecutadas, por ejemplo, las instrucciones
SELECT, DELETE, UPDATE y CREATE TABLE. Estos tipos de
instrucciones deben ejecutarse dentro del contexto de una
transaccin. Si ninguna transaccin est activa, una de ellas es
iniciada.

Las

transacciones

tambin

pueden

ser

iniciadas

explcitamente utilizando la instruccin START TRANSACTION. Esta


instruccin sirve para dos propsitos: establecer las propiedades de
la transaccin e iniciar la transaccin. En trminos de establecer las
propiedades, la instruccin START TRANSACTION funciona de la
misma manera que la instruccin SET TRANSACTION. Se puede
establecer el nivel de acceso, el nivel de aislamiento y el tamao de
diagnstico. Al igual que para iniciar una transaccin, simplemente
se ejecuta la instruccin START TRANSACTION.
START TRANSACTION
READ ONLY,
ISOLATION LEVEL READ UNCOMMITTED,
DIAGNOSTICS SIZE 5;
TRABAJAR CON TRANSACIONES
En este ejercicio se crearn varias transacciones que ejecutan
instrucciones para la base de datos INVENTARIO. Para cada
transaccin se iniciar explcitamente la transaccin y se ejecutarn
una o ms instrucciones SQL. Para este ejercicio se trabajar con la
instruccin

COMMIT

con

la

instruccin

ROLLBACK

en

transacciones separadas debido a que se est trabajando con


invocacin directa de SQL (en la aplicacin cliente).

II.3.

PASO A PASO

15

TRANSACCIONES
a) Conectarse a una base de datos, en este lo siguiente usaremos
la base de datos INVENTARIO.
b) La primera transaccin que se crear utiliza una instruccin
START TRANSACTION para determinar el nivel de aislamiento
a READ UNCOMMITTED, recupera informacin de la tabla
ARTISTAS, y luego completa la transaccin. Ingrese y ejecute
la siguiente instruccin SQL:
START TRANSACTION
ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM ARTISTAS;
COMMIT;
La transaccin deber arrojar todas las filas y columnas de la
tabla ARTISTAS.
c) La siguiente transaccin que se crear tambin utiliza una
instruccin START TRANSACTION para determinar el nivel de
aislamiento. Pero esta vez se determinar el nivel como
SERIALIZABLE. Debido a que SERIALIZABLE es el nivel
preestablecido, no se requiere definirlo; sin embargo, para los
propsitos de este ejercicio, vamos a incluirlo. Despus de que
se inicia la transaccin, se intentar actualizar la tabla
DISCO_COMPACTO incrementando el valor EN_EXISTENCIA
por 2 para todas las filas con un valor ID_DISQUERA igual a
832. Despus de la instruccin UPDATE, se reinvertir la
transaccin para que ningn dato sea modificado en la base de
datos. Ingrese y ejecute la siguiente instruccin:
START TRANSACTION
ISOLATION LEVEL SERIALIZABLE;
UPDATE DISCOS_COMPACTOS
SET EN_EXISTENCIA = EN_EXISTENCIA + 2
WHERE ID_DISQUERA = 832; ROLLBACK;

15

TRANSACCIONES
Se deber recibir algn tipo de mensaje avisando la finalizacin
de la transaccin
d) Ahora se confirmar que la actualizacin que se intent en el
paso anterior haya sido en realidad reinvertida. Ingrese y
ejecute la siguiente instruccin SQL:
SELECT TITULO_CD, EN_EXISTENCIA
FROM DISCOS_COMPACTOS
WHERE ID_DISQUERA = 832;
La instruccin SELECT deber arrojar los siguientes resultados
de la consulta
Los valores EN_EXISTENCIA mostrados en estos resultados
son

los

que

estaban

contenidos

en

la

tabla

DISCO_COMPACTO antes de que se ejecutara la transaccin.


Si la transaccin no hubiera sido reinvertida, cada uno de estos
valores se habra incrementado por 2.
e) Ahora vamos a agregar un punto de recuperacin a la
transaccin que se cre en el paso anterior. Se requiere
asegurarse de referirse al punto de recuperacin en la
instruccin ROLLBACK. Tambin se agregar una instruccin
SELECT antes del punto de recuperacin. Ingrese y ejecute la
siguiente instruccin SQL:
START TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT TITULO_CD, EN_EXISTENCIA
FROM DISCOS_COMPACTOS
WHERE ID_DISQUERA = 832; SAVEPOINT SECCION_1;
UPDATE DISCOS_COMPACTOS
SET EN_EXISTENCIA = EN_EXISTENCIA + 2
WHERE ID_DISQUERA = 832;
ROLLBACK TO SAVEPOINT SECCION_1;

15

TRANSACCIONES
Ahora la transaccin solamente se reinvertir al punto anterior
a la instruccin UPDATE. Adems, debido a que la transaccin
inclua una instruccin SELECT, se debern recibir los
resultados de la consulta que se recibieron en el paso anterior
f) En la transaccin anterior, la instruccin SELECT estaba antes
del punto de recuperacin, lo que significa que la instruccin
SELECT fue ejecutada antes que la instruccin UPDATE. Si la
transaccin no reinvirtiera la actualizacin, los resultados de la
consulta no reflejaran la informacin correcta. Como resultado,
se deber verificar que la instruccin UPDATE haya sido
reinvertida. Ingrese y ejecute la siguiente instruccin SQL:
SELECT TITULO_CD, EN_EXISTENCIA
FROM DISCOS_COMPACTOS
WHERE ID_DISQUERA = 832;
Los resultados de la consulta debern mostrar los mismos
valores EN_EXISTENCIA que los resultados de la consulta
arrojados en los dos pasos anteriores.
g) Cierre la aplicacin de base de datos utilizada.
II.4.

MS EJEMPLOS
Ejemplo 1:
START TRANSACTION;
SELECT @A:=SUM(salary)
FROM table1
WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;

15

TRANSACCIONES
Ejemplo 2:
Veremos un ejemplo completo,

donde utilizaremos START

TRANSACTION (no es necesario AUTOCOMMIT en 0)

CREATE TABLE `departamentos`


( `CODIGO` INTEGER(11) NOT NULL DEFAULT 0,
`NOMBRE` VARCHAR(100),
`PRESUPUESTO` INTEGER(11) DEFAULT NULL,
PRIMARY KEY (`CODIGO`) )ENGINE=InnoDB
Ahora, insertaremos registros de la tabla departamentos_externos a
departamentos mediante una transaccin:
START TRANSACTION;
SELECT @A := presupuesto
FROM departamentos_externos
WHERE codigo =11;
INSERT INTO departamentos( codigo, nombre, presupuesto )
VALUES ( 11, Department test, @A );
COMMIT;
En el ejemplo anterior se guard el presupuesto del departamento
externo 11 en la variable @A y luego fue asignado al presupuesto en
la tabla departamentos.
Ejemplo 3:
START TRANSACTION;
SELECT @A := presupuesto, @B := codigo, @C := nombre
FROM departamentos_externos
WHERE codigo=33;
INSERT INTO departamentos( codigodep, nombredep, presupuesto)
VALUES (@B , @C , @A );

15

TRANSACCIONES
COMMIT ;

Ejemplo 4
START TRANSACTION;
SELECT @A:=PRESUPUESTO
FROM departamentos_externos
WHERE codigo=11;
UPDATE departamentos
SET PRESUPUESTO = PRESUPUESTO + @A
WHERE codigo=33;
COMMIT;

15

TRANSACCIONES
II.5.

EJEMPLO COMPLETO DE TRANSACCIONES


##PRIMERO CREAMOS UNA BASE DE DATOS
CREATE DATABASE CLINTONTRANSAC;
## BASE DE DATOS A USAR
USE CLINTONTRANSAC;
## LUEGO SE PASARA CREAMOS TABLAS PARA HACER LAS
##TRANSACCIONES
CREATE TABLE DATOS
(CODIGO INTEGER(11) NOT NULL DEFAULT '0',
NOMBRE VARCHAR(50),
APELLIDO VARCHAR(50),
CURSO VARCHAR(50),
OBS INTEGER(11) DEFAULT NULL,
PRIMARY KEY (CODIGO))ENGINE=InnoDB;
##CREAMOS LA SEGUNDA TABLA DONDE AREMOS LAS
##TRANSACCIONES
CREATE TABLE ESCUELA
(CODIGO INTEGER(11) NOT NULL DEFAULT '0',
NOMBRE VARCHAR(50),
DOCENTE VARCHAR(50),
CURSO VARCHAR(50),
OBS INTEGER(11) DEFAULT NULL,
PRIMARY KEY (CODIGO))ENGINE=InnoDB;
##SELECCIONAMOS LOS CAMPOS QUE QUERAMOS HACER LA
##TRANSACCION EN EL EJEMPLO
##SOLO AREMOS LA TRANSACCION
## DEL CURSO Y OBS DE LA TABLA DATOS A LA TABLA
##ESCUELA
START TRANSACTION;
SELECT @A := CURSO, @B := OBS
FROM DATOS
WHERE CODIGO =1;
## AHORA INSERTAMOS LA TRANSACCION HECHA
INSERT INTO ESCUELA( CODIGO, NOMBRE, DOCENTE,
CURSO, OBS )
VALUES ( 1, 'SISTEMAS','GONZALES RAMOZ',@A, @B );
COMMIT;
## LUEGO NOS MOSTRAR LA TRANSACCION
##DESARROLLADA
SELECT * FROM escuela e;

15

CONCLUSIONES
Para concluir podemos decir que las transacciones son de mucha ayuda
aunque son un tanto difciles de comprender y de realizar, adems hay que
tomar en cuenta que al realizar una transaccin en MySQL que apenas se
realice un INSERT, UPDATE o DELETE se genera un bloqueo sobre la tabla y
que otros clientes no pueden acceder a la tabla para escribir en esta. Otros
clientes podrn realizar SELECT sobre la tabla, pero no podrn ver los datos
del primer cliente hasta que los mismos sean confirmados.

Bibliografa
Gilfillan, Lan. la biblia de MySQL. Mexico: Anaya, 2009.
Sheldon, Andy Oppel Robert. fundamentos de SQL. Mexico: Mc Graw Hil,
2010.
SILBERSCHATZ, A., KORTH, H.F., SUDARSHAN, S. fundamentos de base de
datos. 3 edicin,: McGraw-Hill, 2000.

S-ar putea să vă placă și