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

Uzamčení řádku MySQL INNODB v PHP

$mysqli->autocommit(FALSE);
$mysqli->query("BEGIN;");
$mysqli->multi_query("SELECT id FROM links WHERE id > (SELECT value FROM meta WHERE name='scan' FOR UPDATE) LIMIT 1000;UPDATE meta SET value=value+1000 WHERE name='scan';");
$mysqli->commit();

Je to složitý problém; zamykání a transakční úrovně, ale kouzlo výše bylo BEGIN tvrzení. Bez něj by každý příkaz běžel na své vlastní úrovni transakce a FOR UPDATE zámek se odemykal příliš brzy.



  1. Může spravovaný ovladač Oracle správně používat async/await?

  2. Oracle SQL - Jak získat nejvyšších 5 hodnot sloupce

  3. jak vybrat pouze řádek s maximální sekvencí bez použití poddotazu?

  4. Více sloupců Pivot v T-SQL