A transação, инкрементирование e MySQL UPDATE

Se o MySQL operação инкрементирования no UPDATE транзакционно-seguro? É possível, uma condição de corrida quando vários clientes simultaneamente uma consulta como "UPDATE minha_tabela SET myfield=myfield+1 WHERE id=myid"? Se mil clientes ao mesmo tempo cumpram esse pedido na linha de base o valor 0, se no final o valor é igual a mil?

O discurso sobre o InnoDB.


Answers 6:

Share:


Zeeshan Tariq
Answer 1

No InnoDB é bloqueado linha, não deve ser ахтунга.


Pam Chase
Answer 2

Sim, será igual a имеено 1000 no final. independentemente do motor. Em diferentes motores é fornecida de forma diferente. Нампример no innodb блокиоровкой um registro específico. No Myisam — bloqueio de tabela inteira em um curto período de tempo.


Cheryl Comfort
Answer 3

Não vejo nenhuma razão para dizer "não". Caso contrário, apenas se perde o sentido de banco de dados relacional.


Shane Ealy
Answer 4

Entrada a você, absolutamente транзакционно seguro. A linha é bloqueada, é alterado, desbloqueado.


Joshwa Villanueva
Answer 5

Veja o princípio de uma ação de atualização.
A entrada é bloqueado, a executar o update e depois, mais só pode trabalhar com este registro. Em princípio, devido a isso, em alguns artigos sobre a otimização e a redução da carga do servidor, recomendam não usar muitas vezes update


Ken O.
Answer 6

Longe do fato de que o valor será de 1.000, especialmente considerando o fato de que o InnoDB se aplica MVCC Considerando isso, quando o 1000 consultas, cada um deles irá aumentar o valor de zero.