Um Exemplo de Como a Leitura Consistente Funciona no InnoDB


Suponha que você esteja utilizando o nível de isolamento padrão REPEATABLE READ. Quando você executa uma leitura consistente, isto é, uma instrução SELECT comum, o InnoDB dará a sua transação um ponto no tempo de acordo com o que a sua consulta viu no banco de dados Assim, se a transação B deleta uma linha e faz um commit depois que o ponto no tempo foi atribuido, então você não verá a linha deletada. Inserções e atualização são feitos de forma parecida.

Você pode avançar o seu ponto no tempo fazendo um commit da transação e fazendo outro SELECT.

Isto é chamado controle de concorrência multi-version.

 User A User B
 SET AUTOCOMMIT=0; SET AUTOCOMMIT=0;
time
| SELECT * FROM t;
| empty set
| INSERT INTO t VALUES (1, 2);
|
v SELECT * FROM t;
 empty set
 COMMIT;
 SELECT * FROM t;
 empty set;
 COMMIT;
 SELECT * FROM t;
 ---------------------
 | 1 | 2 |
 ---------------------

Assima o usuário A vê a linha inserida por B apenas quando B fizer um commit da inserção e A tiver feito um commit de sua própria transação pois assim o ponto no tempo é avançado para depois do commit de B.

Se você deseja ver o estado mais atual do banco de dados, você deve utilizar uma trava de leitura:

Retornar