Příkazy SQL jsou atomické. To znamená, že pokud provedete něco takového:
UPDATE Cars SET Sold = Sold + 1
Nikdo nemůže změnit Sold
proměnná během tohoto příkazu. Vždy se zvýší o 1, i když někdo jiný současně provádí stejný příkaz.
Problém nastane, pokud máte příkazy, které na sobě závisí:
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
Mezi těmito dotazy může jiný uživatel změnit tabulku Auta a aktualizovat Prodáno. Chcete-li tomu zabránit, zabalte jej do transakce:
BEGIN;
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
COMMIT;
Transakce jsou podporovány InnoDB, ale ne MyISAM.