sql >> Databáze >  >> RDS >> Mysql

Exkluzivní transakce Laravel 4 s aktualizací a výběrem

Zapomněl bych pokusit se zamknout stůl a/nebo to udělat v transakci, na to existují lepší vzory:

  • Vygenerujte jedinečný token
  • Přiřaďte tento token k dalšímu dostupnému záznamu
  • Přečtěte si, který řádek token získal, a zpracujte jej

Tímto způsobem nepotřebujete vůbec žádné zamykání a transakce (protože DB přiřadí váš token POUZE JEDNOMU nepoužitému záznamu).

Pseudokód:

$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. SQL Server String nebo binární data by byla zkrácena

  2. Jak správně zavřít kurzor v Androidu

  3. Příkaz SQL INSERT INTO

  4. Přidání 'serial' do existujícího sloupce v Postgresu