sql >> Databasteknik >  >> RDS >> Mysql

Låsa en MySQL INNODB-rad i 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();

Det är en komplex fråga; låsning och transaktionsnivåer, men magin ovan var BEGIN påstående. Utan den kördes varje sats på sin egen transaktionsnivå och FOR UPDATE låset låstes upp för tidigt.



  1. Hur hämtar man unika rader baserat på kolumnvärdekombinationer?

  2. Analog av OUTER APPLY i andra RDBMS (inte SQL Server)

  3. Hur laddar man en XML-fil till en databas med ett SSIS-paket?

  4. JSON_VALUE() Funktion i Oracle