Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Laravel 4 exklusive Transaktion mit Update und Auswahl

Ich würde vergessen zu versuchen, die Tabelle zu sperren und/oder es in einer Transaktion zu tun, dafür gibt es bessere Muster:

  • Generieren Sie ein eindeutiges Token
  • Weisen Sie dieses Token dem nächsten verfügbaren Datensatz zu
  • Lesen Sie, welche Zeile das Token erhalten hat, und verarbeiten Sie es

Auf diese Weise brauchen Sie überhaupt keine Sperren und Transaktionen (weil die DB Ihren Token NUR EINEM unbenutzten Datensatz zuweist).

Pseudocode:

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