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.