Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por que esse exemplo de seleção para atualização funciona?


Eu acho que o comportamento esperado está um pouco fora. Antes da confirmação de db_slow, todas as linhas da tabela são bloqueadas. Após o commit, há duas linhas. db_fast é desbloqueado quando db_slow é confirmado. Assim, o comportamento é:
  1. db_slow:selecione a linha 1 e bloqueie-a
  2. db_slow:veja que é apenas 1 linha e aguarde
  3. db_fast:tente selecionar a linha 1, veja se está bloqueada, aguarde
  4. db_slow:inserir linha com '2'
  5. db_slow:confirmar
  6. db_fast:desbloqueado e lê 2 linhas
  7. db_fast:não faz nada
  8. Finalizar com foo:1, 2