São os 3 problemas clássicos de concorrência:
Atualização perdida - 2 transações A e B lêem o mesmo registro R, ambas recuperam o mesmo valor. A transação A faz um update R, e em seguida B também faz um update R, mas com base no valor recuperado antes do update de A. Com isso, a atualização executa por A será perdida, pois B não a considerou.
Dependência de transação não confirmada - 2 transações A e B são iniciadas. B faz um update R, e em seguida A lê o valor de R (com valor atualizado por B). Mas, ocorre um problema na transação B, que faz um rollback restaurando o valor anterior de R. Com isso, a transação A considerou em seu processamento um valor de R que na prática nunca existiu, pois não foi confirmado.
Análise inconsistente - 2 transações A e B são iniciadas. A transação A lê o registro R, em seguida a transação B lê o valor de R e faz um update R, que é confirmado com commit. Como A possui o valor anterior de R, este será usado em seu processamento, um valor inconsistente pois não considerou a atualização de B.
Esses 3 problemas são tratados via mecanismo de bloqueios, registros utilizados por uma transação tem seus acessos de leitura e escrita bloqueados para outras transações.