Suponha que exista uma tabela "Bank_Account" e contenha uma única coluna "balance", onde todos têm saldo = 100.
Se uma transação executar "atualizar Bank_Account set balance = 200 onde 1=1; commit;" É possível que quaisquer 2 transações executando uma seleção na tabela Bank_Account tenham uma leitura 200 e outra leitura 100 para uma conta bancária diferente?
Ou uma vez retornado 200 para uma determinada conta bancária, todas as outras necessariamente retornarão 200 também porque o commit foi atômico?
Minha intuição no banco de dados seria que uma vez que alguém lê 200, todos os outros devem ler 200 porque uma transação é atômica, mas também li que algumas seleções podem ser executadas sem bloquear a tabela ou linhas e retornar um instantâneo dos dados no início de uma transação, mesmo assumindo o nível de isolamento de leitura confirmada.
Se for esse o caso, como os bancos de dados implementam esse comportamento sem bloqueios? Que mágica o commit e os selects realizam para garantir que os selects operem em um comportamento atômico, tudo ao mesmo tempo, de um commit?
Obrigado