sql >> Database >  >> RDS >> Mysql

Laravel 4 exclusieve transactie met update en select

Ik zou vergeten de tafel te vergrendelen en/of het in een transactie te doen, hier zijn betere patronen voor:

  • Genereer een unieke token
  • Wijs dat token toe aan het volgende beschikbare record
  • Lees welke rij het token heeft gekregen en verwerk het

Op die manier heeft u helemaal geen vergrendeling en transacties nodig (omdat de DB uw token SLECHTS aan EEN ongebruikte record zal toewijzen).

Pseudo-code:

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



  1. Waarom werkt die query niet zoals ik had verwacht?

  2. Wat is het doel van dit soort SQL-injectie?

  3. MySQL INSERT IF (aangepaste if-statements)

  4. Hoe Galera-cluster te beveiligen - 8 tips