Mysql
 sql >> Database >  >> RDS >> Mysql

accesso simultaneo al database MySQL tramite stored procedure

Innanzitutto, come affermato in un altro post, usa InnoDB. È il motore di archiviazione predefinito a partire da MySQL 5.5 ed è più robusto.

In secondo luogo, guarda questa pagina:http:// dev.mysql.com/doc/refman/5.5/en/innodb-locking-reads.html

Dovresti usare SELECT ... FOR UPDATE per impedire ad altre connessioni di leggere la riga che stai per aggiornare fino al completamento della transazione:

START TRANSACTION;

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

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

COMMIT;

Questo è meglio del bloccare la tabella perché InnoDB esegue i blocchi a livello di riga. La transazione sopra bloccherebbe solo le righe in cui id =5... quindi un'altra query che funziona con id =10 non verrebbe bloccata da questa query.