Mysql
 sql >> Database >  >> RDS >> Mysql

Transazione esclusiva di Laravel 4 con update e select

Dimenticherei di provare a bloccare il tavolo e/o farlo in una transazione, c'è un modello migliore per questo:

  • Genera un token univoco
  • Assegna quel token al successivo record disponibile
  • Leggi quale riga ha ricevuto il token ed elaboralo

In questo modo non hai bisogno di alcun blocco e transazione (perché il DB assegnerà il tuo token SOLO a UN record inutilizzato).

Pseudo-codice:

$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);