Da this Java Oracle tutorial:Differenza tra lettura non ripetibile vs sporco leggere
Una lettura non ripetibile si verifica quando transazione A recupera una riga, transazione B aggiorna in seguito la riga, e la transazione A seguito recupera di nuovo la stessa riga. Transazione A recupera due volte la stessa riga ma visualizza dati diversi.
Qual è la differenza tra una lettura sporca e una lettura non ripetibile? Non è la stessa cosa? leggere il risultato sbagliato a causa dell'aggiornamento degli altri?
Grazie in anticipo.
Come può essere possibile? Voglio dire, dopo che la transazione è stata completata, l'unico modo per prevenire la lettura non ripetibile è di mantenere il blocco anche dopo il commit ... Comunque prima o poi verrà effettuata un'altra connessione (B) e come impedirà l'aggiornamento di quel riga precedentemente recuperata da A – Rollerball
O forse solo 1 connessione per volta potrebbe scrivere nel DBMS. Quindi, finché esiste una connessione attiva a un DBMS, nessun'altra connessione può effettivamente aggiornare il DB per quelle particolari righe (fino a quando la prima connessione non viene chiusa) Ho ragione? – Rollerball
Una lettura ripetibile è garantita solo per la durata di una transazione: si avvia una transazione T1, si legge A1, quindi un'altra transazione T2 modifica A1 a A2 e si impegna, quindi la prima transazione T1 rilegge il valore e continua a leggere A1 . Questa è una lettura ripetibile. Naturalmente, un'altra transazione T3 che legge il valore per la prima volta dopo che T2 ha eseguito il commit leggerà il valore impegnato, A2. Per sapere come è implementato dal tuo database, leggi la sua documentazione. Molti di loro usano [MVCC] (http://en.wikipedia.org/wiki/Multiversion_concurrency_control), AFAIK. –