LEITURA REPETÍVEL
Na definição do SQL92REPEATABLE READ
, é definido por condições de servidor.
P1 ("Leitura suja"):
1) P1 ("Dirty read"): a transação SQL T1 modifica uma linha. A transação SQL T2 então lê essa linha antes que T1 execute um COMMIT. Se T1 então executar um ROLLBACK, T2 terá lido uma linha que nunca foi confirmada e que, portanto, pode ser considerada como nunca existiu.
P2 ("Leitura não repetível"):
2) P2 ("Non-repeatable read"): a transação SQL T1 lê uma linha. A transação SQL T2 modifica ou exclui essa linha e executa um COMMIT. Se T1 tentar reler a linha, ele pode receber o valor modificado ou descobrir que a linha foi deletada.
Atomicidade e no updates will be lost
:
Os quatro níveis de isolamento garantem que cada transação SQL seja executada completamente ou não seja executada e que nenhuma atualização seja perdida.
Tabela 9, cuja definição REPEATABLE READ
deve excluir P1 e P2:
A Tabela 9, "Níveis de isolamento da transação SQL e os três fenômenos" especifica os fenômenos possíveis e impossíveis para um determinado nível de isolamento.
Portanto, na definição do SQL92 de REPEATABLE READ
, ele deve excluir P1, P2 e suporte para atomicidade, sem perda de atualização.
A5B (escrever enviesado)
Por outro lado, A5B (Write Skew) é definido em A Critique of ANSI SQL Isolation Levels :
Suponha que T1 leia x e y, que são consistentes com C(), e então um T2 leia x e y, escreva x e confirme. Então T1 escreve y. Se houvesse uma restrição entre x e y, ela poderia ser violada. Em termos de histórias:
r1[x]...r2[y]...w1[y]...w2[x]...(c1 e c2 ocorrem)
(Escrever Inclinação)
Preclude REPEATABLE READ
A5B (Write Skew)?
No documento posterior, ele afirma REPEATABLE READ
que impedirá A5B (desvio de gravação) na Tabela 4. Tipos de isolamento caracterizados por possíveis anomalias permitidas. , e não estou convencido.
Alguma ideia?
Sim - se você aceitar a visão da Crítica de que as definições ANSI foram baseadas em comportamentos de bloqueio, por exemplo:
Desse ponto de vista, a história:
...é impedido quando bloqueios compartilhados de leitura de longa duração são obtidos, porque
w1[y]
é bloqueado pelo bloqueio obtido porr2[y]
. Da mesma forma,w2[x]
seria bloqueado pelo bloqueio feito porr1[x]
. Portanto, esta história não pode surgir.Não - se você interpretar literalmente as definições ANSI. Estes são amplamente vistos como incompletos, então esse resultado não é realmente tão surpreendente.