sql >> Base de Datos >  >> RDS >> Mysql

Transacción exclusiva de Laravel 4 con actualización y selección

Olvidaría tratar de bloquear la tabla y/o hacerlo en una transacción, hay mejores patrones para esto:

  • Generar un token único
  • Asigne ese token al siguiente registro disponible
  • Lea qué fila obtuvo el token y procéselo

De esa manera, no necesita bloqueos ni transacciones (porque la base de datos asignará su token SOLO a UN registro no utilizado).

Pseudocódigo:

$token = time(); //Only you have very low concurrency. Otherwise use something more unique, like a GUID or an identity value from a tokens table.

EXEC SQL: "UPDATE mytable SET token = $token WHERE token IS NULL LIMIT 1"

EXEC SQL: "SELECT id FROM mytable WHERE token = $token"

process($id);