Desculpas antecipadamente se isso já foi discutido antes, ou mesmo é fundamental o suficiente para ser descrito, digamos, na Wikipedia. Eu apenas senti que perguntar seria mais eficiente!
De qualquer forma, quero perguntar sobre transações, do ponto de vista teórico. Em particular, digamos que temos dois (ou mais) usuários olhando para um conjunto de dados e ocorre o seguinte nos horários indicados ( tX
):
t0 User1 starts a transaction
t1 User2 starts a transaction
t2 User1 runs a DML operation on the dataset
t3 User2 runs a different DML on the same dataset
t4 User1's operation finishes and is committed
t5 User2 commits
Minha pergunta é: como as operações DML são executadas User1
e User2
interagem entre si? A operação iniciada em t2
por User1
opera nos dados conforme foi definido no início de sua transação (ou seja, em t0
), e da mesma forma para User2
a operação de , de modo que não haja interação? Ou, se digamos que User1
cometeram sua operação após User2
o início da transação de, mas antes de iniciarem sua operação, os dados User2
que estavam procurando seriam atualizados, respectivamente? Além disso, como é mantida a consistência em caso de conflitos?
Para todos os casos gerais, a segunda transação será bloqueada até que a primeira seja confirmada ou revertida. Como observa Martin, seu nível de isolamento pode afetar isso, mas todo o objetivo da conformidade com o ACID é mantê-los separados.