whereraw wherein query inner php mysql laravel laravel-5 pessimistic-locking

php - wherein - Laravel lockforupdate(bloqueo pesimista)



wherein eloquent (1)

Este trabajo, finalmente, pero todavía no entiendo qué compartióLock (LOCK IN SHARE MODE) y lockForUpdate (FOR UPDATE) diferente

public function index() { return dd(/DB::transaction(function() { if (/Auth::guard(''user'')->check()) { $model = /App/Models/User::lockForUpdate()->find(1); sleep(30); $model->point = 100000; $model->save(); } else { $model = /App/Models/User::lockForUpdate()->find(1); $model->point = $model->point + 1; $model->save(); } return $model; })); }

Estoy tratando de averiguar cómo usar / probar el lockforupdate correctamente, pero encontré que no funciona como esperaba

esto solo está probando

public function index() { return dd(/DB::transaction(function() { if (/Auth::guard(''user'')->check()) { $model = /App/Models/User::find(1)->lockForUpdate(); sleep(60); $model->point = 100000; $model->save(); } else { $model = /App/Models/User::find(1); $model->point = 999; $model->save(); } return $model; })); }

Intento probar en el navegador 2, el navegador 1 usuario inició sesión y el navegador 2 no ha iniciado sesión, el navegador 1 pulso actualizar, luego se bloqueará la actualización y durmirá 60 segundos antes de la actualización

en los 60 segundos, voy al navegador 2 y pulso actualizar, sin embargo, el registro no está bloqueado, verifico phpmyadmin y el registro se actualiza (dentro del bloqueo de 60 segundos por el navegador 1)

pero después de 60 segundos, el registro ha sido modificado nuevamente por el navegador 1 (Punto 100000)

entonces, ¿entiendo mal que el lockforupdate se usa para? o lo pruebo incorrectamente?

lo que esperaba es que el navegador 2 no modifique la fila en los primeros 60 segundos (página en blanco con favicon de carga o error de tiro?)

https://laravel.com/docs/5.2/queries#pessimistic-locking

e investigué un poco, pero aún no puedo entender qué diferencia hay entre sharedLock (LOCK IN SHARE MODE) y lockForUpdate (FOR UPDATE)

Por cierto, confirmé que la base de datos es innodb