Всем привет. Перечитал много статей по транзакциям и блокировкам в MySQL, но пока так и не понял, что следует использовать для моего случая. Имеется таблица clients с полем balance, где записан баланс пользователя. Пользователь в интерфейсе вводит сумму, которую хочет списать и в результате поле balance должно быть обновлено для данного клиента. Как защитить себя от того, что два процесса могут одновременно считать и записать данные в одну строку. Таблица MyISAM. Заранее благодарен за помощь в этом вопросе!
Существует явная и не явная блокировка.
Так как у тебя механизм хранения MyISAM, то неявная блокировка будет происходить на уровне строк.
Если ты хочешь что бы твои данные были правильно записаны и считаны, то перед записью этих данных явно установи блокировку (Устанавливается на всю таблицу). А после сними ее.
Пример:
LOCK TABLES clients READ LOCAL;
... производим запись (insert, update)...
UNLOCK TABLES;
Здесь:
P.S здесь более подробно
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости