@phpcoder81

Будет ли работать транзакция?

Всем привет. Есть задача. Получить номер документа уникальный, записать его и обновить следующий номер для других юзеров. Как бы это эмуляция auto increment. Для этого надо заблокировать запись и чтение из таблицы, пока не разберемся с текущим пользователем.
Сработает ли транзакция такая?
private function changeNum($id){
  
  $this->db->beginTransaction();
  
  $num = $this->getNum($id);
  $num++;
	
  if(!$this->setNum($id, $num)){
    return false;
  }

  $this->db->commit();

}
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ответы на вопрос 1
ivankomolin
@ivankomolin
1. Транзакция не блокирует таблицу на чтение и запись. Блокировки и транзакции - это два разных механизма.
Транзакция отвечает за изоляцию операций(производимых внутри транзакции) от других операций.
2. Необходимо разобраться какой уровень изоляции вам нужен и какой установлен сейчас для этой транзакции.

По указанному коду непонятно сработает ли транзакция. Чтобы стало понятно, нужен код запросов внутри транзакции, а также знать текущий уровень изоляции.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы