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

Blocco di una riga MySQL INNODB in 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();

È una questione complessa; blocco e livelli di transazione, ma la magia sopra era il BEGIN dichiarazione. Senza di essa, ogni istruzione era in esecuzione nel proprio livello di transazione e il FOR UPDATE il lucchetto è stato sbloccato troppo presto.