Lost update
# Lost update

In informatica, con il termine lost update si intende un errore nella gestione della concorrenza tra transazioni dovuta ad una dipendenza write -> write.

In altre parole il lost update è una perdita di modifiche da parte di una transazione causato da un aggiornamento operato da un'altra transazione.

## Definizione

Si è in presenza di lost update quando una transazione Ta legge un dato X con versione 0, denotato come X(0), ne produce una nuova versione X(1), e un'altra transazione Tb legge la vecchia versione X(0) e produce X(2).

## Esempi

### Esempio 1

In tabella viene mostrato un esempio di lost update:

| Tempo | Transazione Ta | Transazione Tb |
| - | - | - |
| t(0) | read[X(0)] | |
| t(1) | | read[X(0)] |
| t(2) | write[X(1)] | |
| t(3) | | write[X(2)] |

Come possiamo vedere la transazione Ta effettua una lettura del dato X(0) al tempo t(0). Nel tempo t(1) la transazione Tb legge il dato X(0). In seguito, al tempo t(2) la transazone Ta modifica il dato X(0) attribuendogli il nuovo valore X(1). Infine nel tempo t(3) la transazione Tb attribuisce un ulteriore nuovo valore X(2) ottenuto prendendo in input il valore X(0) al tempo t(1). In questo esempio c'è una perdita dell'aggiornamento (lost update) di Ta.

### Esempio 2

Nella tabella successiva viene mostrato un lost update in caso di rollback:

| Tempo | Transazione Ta | Transazione Tb |
| - | - | - |
| t(0) | read[X(0)] | |
| t(1) | | read[X(0)] |
| t(2) | write[X(1)] | |
| t(3) | | write[X(2)] |
| t(4) | | rollback |

In questo caso la modifica operata da Ta al tempo t(2) viene persa a causa del rollback di Tb al tempo t(4) che ripristina il valore X(0) valido al tempo t(1).

