Created: 2025-04-24 Thu 10:22
| Atomicidad | Un conjunto de cambios se realiza en su totalidad, o no se realiza ninguno |
| Consistencia | Las reglas de los datos (constraints) se respetan |
| aIslamiento | Cada usuario puede trabajar considerando que es el único que utiliza la base de datos |
| Durabilidad | Una vez grabada una modificación, persistirá aunque ocurra algún fallo posterior |
commit: Los cambios se guardanrollback: Ningún cambio se guardarollbackprimary keyuniquenot nullforeign keychecktriggers (scripts del gestor de base de datos)drop)commit que
| Lectura sucia | Dirty read | Un usuario lee datos aún no confirmados |
| Lectura no repetible | Repeatable read | Un usuario lee menos filas (o filas cambiadas) en select sucesivas dentro de la misma transaccción |
| Fila fantasma | Phanton read | Un usuario lee más filas en select sucesivas dentro de la misma transacción |
| Problema | Nivel de aislamiento |
|---|---|
Read Uncommited (Oracle no lo tiene) |
|
| Lectura sucia | |
Read commited (por defecto en Oracle) |
|
| Lectura no repetible | |
Repeatable read (Oracle no lo tiene) |
|
| Fila fantasma | |
Serializable |
Nota: Un nivel de aislamiento soluciona todos los problemas que quedan por encima.
create table ALUMNOS( DNI varchar(10), NOMBRE varchar(10));
insert into ALUMNOS values ('1','Pepe');
insert into ALUMNOS values ('2','Juan');
insert into ALUMNOS values ('3','María');
| Conexión 1 | Conexión 2 |
|---|---|
set transaction isolation level read committed |
set transaction isolation level read committed |
select * from alumnos |
select * from alumnos |
update alumnos set nombre='Pepe2' where dni=3 |
|
select * from alumnos |
|
| Aún no se ve el cambio, sería una lectura sucia | |
commit |
|
select * from alumnos |
|
| Ahora se ve el cambio, es una lectura no repetible | |
rollback |
| Conexión 1 | Conexión 2 |
|---|---|
set transaction isolation level read committed |
set transaction isolation level read committed |
select * from alumnos |
|
insert into ALUMNOS values('4','Susana') |
|
commit |
|
select * from alumnos |
|
La conexión 1 leerá más alumnos en la segunda select, una fila fantasma |
|
rollback |
set isolation level indica a la base de datos que bloquee filas, campos o tablascommitrollbackRead commitedSerializable| Conexión 1 | Conexión 2 |
|---|---|
set transaction isolation level serializable |
|
select * from alumnos |
|
update alumnos set nombre='Pepe2' where dni=3 |
|
select * from alumnos |
|
| No se ve el cambio, sería una lectura sucia | |
commit |
|
select * from alumnos |
|
| El cambio no se ve, sería lectura no repetible | |
rollback |
| Conexión 1 | Conexión 2 |
|---|---|
set transaction isolation level serializable |
|
insert into ALUMNOS values('5','Pepe') |
|
commit |
|
select * from alumnos |
|
| No se ve el cambio, sería lectura no repetible | |
delete from alumnos where nombre='Pepe' |
|
| ORA-08177: can't serialize access for this transaction | |
rollback |
lock table TABLA in exclusive modeselect <una consulta que devuelva algunas filas de una tabla>
for update
for updatelock tableinsertkill session