ESCUELA PROFECIONAL DE
INGENIERA DE SISTEMAS E INFORMTICA
SEMESTRE 2015 I
PROGRAMACIN III
TRANSACCIONES
DOCENTE
Alberto
ALUMNO
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.
1.3.
SOLUCIONANDO PROBLEMAS............................................................5
1.4.
1.4.1.
Atomicidad.................................................................................... 6
1.4.2.
Consistencia.................................................................................. 6
1.4.3.
Aislamiento (Isolated)......................................................................7
1.4.4.
Durabilidad.................................................................................... 7
1.5.
1.5.1.
1.6.
II.
NOTA........................................................................................... 9
DESARROLLO DE TRANSACCIONES.......................................................11
2.1.
2.3.
PASO A PASO.................................................................................... 13
2.4.
MS EJEMPLOS................................................................................ 15
2.5.
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.
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.
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
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.
exitosamente,
entonces
todos
los
cambios
son
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.
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
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
SET
CONSTRAINTS
refiere
si
una
restriccin
es
aplicada
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
I.6.
de
otras
transacciones.
Una
instruccin
SET
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.
II.2.
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
COMMIT
con
la
instruccin
ROLLBACK
en
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
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,
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.
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.