@KuzmenkoArtem

Правильно ли я использую lock tables?

Поставил тэг laravel так как возможно это относится к нему.
$user = User::find($userId);

DB::raw('LOCK TABLES users WRITE');

if (User::count() == 1) {
   abort(403, "Can't delete last user");
}

sleep(10); //do some stuff
        
$user->delete();

DB::raw('UNLOCK TABLES;');

В примере выше, если залогиниться под двумя разными последними юзерами в разных браузерах
и инициировать удаление, то они удалят друг друга.

Задача не допустить возможности удаления всех юзеров
Основная задача для меня - разобраться как работать с локами.

В моем понимании, второй запрос должен был застыть на User::count() и ждать пока не выполниться первый, но он этого не делает
  • Вопрос задан
  • 127 просмотров
Пригласить эксперта
Ответы на вопрос 1
@bacon
Задача не допустить возможности удаления всех юзеров
для этого вообще не нужен лок.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы