Запрос строки блокировки Zend Framework

Это мой запрос:

 try {
$this->_db->beginTransaction();

$this->_db->update($this->_name, $data, $where);

$this->_db->commit();
} catch (Exception $e) {
$this->_db->rollback();

throw $e;
}

Я хочу, чтобы какой-то пользователь использовал этот запрос, чтобы эта строка в таблице была заблокирована, а когда запрос завершится, будет разблокирован. Но теперь, если два пользователя используют этот запрос одновременно, они могут обновить эту строку. Моя таблица InnoDB.

Exp.
Если какой-либо пользователь использует этот запрос для обновления новостей с id = 10, и в этот момент другой пользователь использует этот запрос для обновления тех же новостей (id = 10). При следующем обновлении один из пользователей не сможет видеть новую информацию о новостях.

-1

Решение

Таблицы InnoDB используют блокировку на уровне строк автоматически. От Справочное руководство по MySQL 5.6: 8.10.1 Методы внутренней блокировки:

MySQL использует блокировку на уровне строк для таблиц InnoDB для поддержки одновременного доступа к записи несколькими сеансами, что делает их подходящими для многопользовательских, высококонкурентных и OLTP-приложений.

Поэтому две строки не могут быть записаны одновременно. Последующие запросы просто помещаются в очередь, пока они не будут готовы к выполнению. (То же самое верно для MyISAM и других типов таблиц, но они используют блокировку на уровне таблиц.) Вам не нужно изменять свой код.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]