Быстрый вопрос / уточнение требуется здесь. У меня есть таблица БД, которая вполне может иметь одновременные обновления записи. Я использую Zend Framework для приложения, и я прочитал о двух направлениях, чтобы избежать этого, во-первых, блокировка таблиц (LOCK TABLES test WRITE) или что-то в этом роде, вернусь и перечитаю, как это сделать точно, если это лучшее решение. Вторые транзакции: $ db-> beginTransaction (); ... $ db-> commit ();
Теперь, «предполагая», что я использую механизм хранения транзакций, такой как InnoDB, транзакции кажутся более распространенным решением. Однако это позволяет избежать следующего сценария:
Пользователь A находится на веб-странице -> отправляет данные -> начинает транзакцию -> читает строку -> вычисляет новое значение -> обновляет строку -> сохраняет -> фиксирует
Пользователь B находится на одной и той же веб-странице в одно и то же время и передает данные в одно и то же время, теперь давайте просто скажем, что это почти одновременно (Пользователь B вызывает функцию обновления в точке между началом транзакции и фиксацией для транзакции пользователя А) Пользователь B полагается на зафиксированные данные из транзакции пользователя A, прежде чем он сможет добиться точного расчета для обновления записи.
IE:
Открытие значения в строке базы данных: 5 Пользователь A отправляет значение 5. (начало
транзакция -> прочитать значение (5) -> добавить отправленное значение (5 + 5 = 10) -> запись
обновленное значение -> сохранить -> зафиксировать)
Пользователь B отправляет значение 7. Мне нужно убедиться, что значение
Чтение транзакции пользователя B равно 10, а не 5 (если обновление не выполнено
перед прочтением).
Я знаю, что это длинное многословное объяснение, я прошу прощения, я не совсем уверен в правильной терминологии для упрощения вопроса.
Спасибо