Mysql
 sql >> Base de données >  >> RDS >> Mysql

Transaction exclusive Laravel 4 avec mise à jour et sélection

J'oublierais d'essayer de verrouiller la table et/ou de le faire dans une transaction, il y a de meilleurs modèles pour cela :

  • Générer un jeton unique
  • Attribuez ce jeton au prochain enregistrement disponible
  • Lisez quelle ligne a reçu le jeton et traitez-la

De cette façon, vous n'avez besoin d'aucun verrouillage ni transaction (car la base de données affectera votre jeton UNIQUEMENT à UN enregistrement inutilisé).

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