Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Transação exclusiva do Laravel 4 com atualização e seleção


Eu esqueceria de tentar bloquear a tabela e/ou fazer isso em uma transação, existem padrões melhores para isso:
  • Gere um token exclusivo
  • Atribua esse token ao próximo registro disponível
  • Leia qual linha recebeu o token e processe-o

Dessa forma, você não precisa de bloqueios e transações (porque o banco de dados atribuirá seu token APENAS a UM registro não utilizado).

Pseudo-có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);