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