Created: 2024-09-08 dom 17:51
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 guardarollback
primary key
unique
not null
foreign key
check
triggers
(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 tablascommit
rollback
Read commited
Serializable
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 mode
select <una consulta que devuelva algunas filas de una tabla>
for update