sql >> Database teknologi >  >> RDS >> Mysql

Låsning af en MySQL INNODB række 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 er et komplekst spørgsmål; låse- og transaktionsniveauer, men magien ovenfor var BEGIN udmelding. Uden den kørte hver erklæring på sit eget transaktionsniveau og FOR UPDATE låsen blev låst op for tidligt.



  1. MYSQL:Opdater felt med sammensætning af flere felter

  2. ON DELETE CASCADE-indstillingen er ikke genereret, når du bruger ddl-skemagenerering på Mysql

  3. 2 måder at returnere ikke-numeriske værdier i SQLite

  4. PostgreSQL-versionskontrol med Atlassian Bitbucket