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

Bloqueio exclusivo do MySQL


Sim, você está bloqueando todas as linhas da tabela quando tem uma condição em uma coluna não indexada como user_id .

Os bloqueios se aplicam a todas as linhas "examinadas". Sua condição WHERE user_id = <user_id> deve examinar todos as linhas na tabela e teste-as uma a uma para ver se elas correspondem ao valor de <user_id> .

Ambas as consultas estão examinando todo o conjunto de linhas, embora estejam procurando valores específicos diferentes de <user_id> , então eles entram em conflito.

Se você tivesse um índice no user_id coluna, então o MySQL usaria esse índice para encontrar as linhas correspondentes primeiro, então apenas as linhas correspondentes se tornariam linhas examinadas e, portanto, seriam bloqueadas.

Isso não tem nada a ver com o nível de isolamento da transação. Esses tipos de bloqueios ocorrem em todos os níveis de isolamento de transações.