Son un conjunto de instrucciones SQL que tienen la cualidad de ejecutarse como una sola unidad, es decir o se ejecutan todas o no se ejecuta ninguna.
A las tablas capaces de soportar transacciones se les conoce como ACID (Atomicidad, Consistencia, Aislamiento , Durabilidad) en inglés (Atomicity, Consistency, Isolation & Durability)
Atomicidad :=> Algo que no puede dividirse, osea todas las consultas son tratadas como una sola y estas solo se ejecutan cuando todas son correctas en el caso de existir un error no se ejecuta nada.
Consistencia :=> Esto esta ligado a la integridad referencial, es decir solo se pueden escribir datos validos respetando los tipos de datos declarados y la integridad referencial.
Aislamiento :=> Cada transacción es ejecutada independientemente de otra transacción o mejor dicho una tras otra, luego de que estas transacciones son ejecutadas (exitosas o incorrectas) los cambios son visibles para el resto de los usuarios.
Durabilidad :=> Cuando se completa una transacción con éxito los cambios se vuelven permanentes.
Ejemplo
Veamos con el siguiente ejemplo cuan importante puede ser una transacción.
Supongamos que dos vendedores de una tienda consultan las disponibilidad de televisores LCD y solo hay uno es stock (como estos están de moda) para realizar una venta y solo queda un televisor en Stock.
Primero solo con SQL
Vendedor 1 : SELECT stock FROM televisores;
Vendedor 2 : SELECT stock FROM televisores;
Vendedor 1 : UPDATE televisores SET stock = stock -1;
Vendedor 2 : UPDATE televisores SET stock = stock -1;
Primero al hacer los SELECT cada vendedor vera en su pantalla que hay disponible 1 televisor.
El vendedor 1 venderá el televisor dejando el stock en 0, luego el vendedor 2 que no sabe que el televisor ya ha sido vendido venderá el televisor (pensando que hay stock) y el stock sera -1 ya que el último ha sido vendido por el vendedor 1.
Si fuese la vida real habrá un cliente que deberá esperar mas de lo normal para que llegue su televisor.
Ahora los mismo con Transacciones
Vendedor 1 : START TRANSACTION;
Vendedor 1 : SELECT stock FROM televisores;
Vendedor 1 : UPDATE televisores SET stock = stock -1;
Vendedor 1 : COMMIT; (ejecuta)
Vendedor 2 : START TRANSACTION;
Vendedor 2 : SELECT stock FROM televisores;
Vendedor 2 : ROLLBACK; (sale de la transacción sin hacer nada mas)
Vendedor 2 : Avisa a cliente que no hay disponibilidad y pregunta si quiere comprarlo y esperar unos días hasta que nuevamente exista stock.
Como hemos visto las operaciones se hicieron ordenadamente permitiendo la consistencia de los datos una vez que el primer vendedor termino la operación el vendedor 2 realizo sus consultas.
Este ejemplo muestra como realizar operaciones en una transacción tenemos 1 una tabla llamada departamentos con la siguiente estructura y registros
CREATE TABLE `departamentos` (
`CODIGODEP` INTEGER(11) NOT NULL DEFAULT '0',
`NOMBREDEP` VARCHAR(100) ,
`PRESUPUESTO` INTEGER(11) ,
PRIMARY KEY (`CODIGODEP`)
)ENGINE=InnoDB
INSERT INTO `departamentos` (`CODIGODEP`, `NOMBREDEP`, `PRESUPUESTO`) VALUES
(1, 'Informatica', 300000),
(2, 'Personal', 200000),
(11, 'Calidad', 150000),
(13, 'Seguridad', 450000),
(56, 'Recursos Humanos', 900000),
(77, 'Administracion', 1500000);
y ahora crearemos una nueva tabla departamentos2 y asignaremos el 30% del dinero del presupuesto de cada departamento a la tabla departamentos2 , es decir en presupuesto de departamentos restaremos el 30% de su presupuesto y los asignaremos a los departamentos de de la tabla departamentos2. (las estructuras serán iguales e incuso mantendremos los mismos códigos de y nombres de los departamentos)
CREATE TABLE `departamentos2` (
`CODIGODEP` INTEGER(11) NOT NULL DEFAULT '0',
`NOMBREDEP` VARCHAR(100) ,
`PRESUPUESTO` INTEGER(11) ,
PRIMARY KEY (`CODIGODEP`)
)ENGINE=InnoDB
y ahora las transacciones
START TRANSACTION;
insert into `departamentos2`
select codigodep, nombredep, presupuesto * 0.30 from `departamentos`;
update departamentos set presupuesto = presupuesto - (presupuesto * 0.30);
COMMIT;
El resultado ha sido una tabla de posee todos los registros de departamentos 1 y los presupuestos de ambas tablas han sido modificados correctamente sumando y restando respectivamente un 30%.
Jlara
2 comentarios:
ACID (Atomicity, Consistency, Isolation & Durability)
Isolation = Aislamiento en español
Saludos, :-)
Muchas Grácias
Publicar un comentario