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

MySQL:atualizações simultâneas (através de threads) em uma tabela simples


O bloqueio é implícito, sim, mas não está sendo feito por executeUpdate() . O mecanismo de armazenamento no MySQL lida com o bloqueio e o desbloqueio.

Sempre que você escreve em uma tabela MyISAM, sua consulta espera que o bloqueio de gravação na tabela esteja disponível, o bloqueio de gravação é adquirido, a gravação é feita e o bloqueio de gravação é liberado. Não há simultaneidade de gravação genuína no MyISAM porque cada trabalhador está de fato esperando na fila pelo bloqueio de gravação. Você não recebe um erro porque as solicitações de gravação são serializadas.

A situação com o InnoDB é semelhante, mas muito diferente, pois o InnoDB bloqueia apenas uma parte da tabela, geralmente no nível da linha, onde o InnoDB pode bloquear um intervalo dentro de um índice, bloqueando assim as linhas nesse intervalo no índice (e o lacuna que os precede). Esse bloqueio é mais granular do que o bloqueio de tabela, permitindo um comportamento de simultaneidade aprimorado, mas não há operação simultânea na mesma linha - cada trabalhador aguarda o bloqueio ou bloqueios de que precisa.

Em ambos os casos, os bloqueios são tomados implicitamente.