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

acesso simultâneo ao banco de dados MySQL usando procedimento armazenado


Primeiro, como dito em outro post, use o InnoDB. É o mecanismo de armazenamento padrão a partir do MySQL 5.5 e é mais robusto.

Segundo, veja esta página:http:// dev.mysql.com/doc/refman/5.5/en/innodb-locking-reads.html

Você deve usar um SELECT ... FOR UPDATE para evitar que outras conexões leiam a linha que você está prestes a atualizar até que sua transação seja concluída:
START TRANSACTION;

SELECT value INTO @value
FROM mytable
WHERE id = 5
FOR UPDATE;

UPDATE mytable
SET value = value + 1
WHERE id = 5;

COMMIT;

Isso é melhor do que bloquear a tabela porque o InnoDB faz bloqueios em nível de linha. A transação acima bloquearia apenas as linhas onde id =5... então outra consulta trabalhando com id =10 não seria retida por esta consulta.