Buon giorno a tutti,
vorrei chiarire un dubbio che mi porto dietro da parecchio, di norma quando si parla di concorrenza si tirano fuori due strade: lock e transazioni.
E' chiaro il funzionamento del lock, è certo che assicuri l'accesso singolo ai dati togliendo quindi "ogni" dubbio sulla integrità dei dei dati.
Le transazioni però mi pare di capire che abbiano un ruolo un pò di verso, assicurano che una serie di operazioni su database vadano, in gruppo, a buon fine in modo da garantire una coerenza delle istruzioni eseguite, ma non effetuano un lock sulle tabelle quindi si potrebbe comunque incappare in una situazione di concorrenza ad esempio in update su un dato.

Come è possibile far conciliare le due cose? magari aggiungendo un ulteriore controllo alla fine delle operazioni prima della commit, come nell'esempio qui sotto?

-inizio transazione
-condizione1 necessaria a far partire le operazioni
---operazione1
---operazione2
---operazione3
-se le tre operazioni sono andate a buon fine si ricontrolla la condizione1 (per controllare non sia cambiata nel frattempo a causa di altro utente) e si esegue la commit

E' forse questo l'unico modo?

Ringrazio in anticipo sperando in un chiarimento.