Po pierwsze, jak wspomniano w innym poście, użyj InnoDB. Jest to domyślny silnik pamięci masowej od MySQL 5.5 i jest bardziej niezawodny.
Po drugie, spójrz na tę stronę:http:// dev.mysql.com/doc/refman/5.5/en/innodb-locking-reads.html
Powinieneś użyć opcji WYBIERZ ... DO AKTUALIZACJI, aby uniemożliwić innym połączeniom odczytanie wiersza, który zamierzasz zaktualizować, dopóki transakcja nie zostanie zakończona:
START TRANSACTION;
SELECT value INTO @value
FROM mytable
WHERE id = 5
FOR UPDATE;
UPDATE mytable
SET value = value + 1
WHERE id = 5;
COMMIT;
Jest to lepsze niż blokowanie tabeli, ponieważ InnoDB wykonuje blokady na poziomie wiersza. Powyższa transakcja zablokowałaby tylko wiersze, w których id =5... więc inne zapytanie działające z id =10 nie zostałoby wstrzymane przez to zapytanie.