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

UPDATE com SELECT, bloqueará cada linha ou todos os registros SELECTed


A UPDATE está sendo executado na transação - é um atomic operação, o que significa que, se uma das linhas falhar (por causa da restrição exclusiva, por exemplo), ela não atualizará nenhuma das 5.000 linhas. Esta é uma das propriedades ACID de um banco de dados transacional.

Por causa disso, o UPDATE mantenha um bloqueio em todas as linhas para toda a transação. Caso contrário, outra transação pode atualizar ainda mais o valor de uma linha, com base em seu valor atual (digamos, atualizar registros definir valor =valor * '2'). Essa instrução deve produzir resultados diferentes dependendo se a primeira transação é confirmada ou revertida. Por isso, ele deve aguardar a primeira transação para concluir todas as 5.000 atualizações.

Se você quiser liberar os bloqueios, basta fazer a atualização em lotes (menores).

P.S. autocommit controla se cada instrução é emitida na própria transação, mas não afeta a execução de uma única consulta