SQL изразите са атомарни. Тоест, ако изпълните нещо подобно:
UPDATE Cars SET Sold = Sold + 1
Никой не може да промени Sold
променлива по време на това изявление. Винаги се увеличава с 1, дори ако някой друг изпълнява същото изявление едновременно.
Проблемът възниква, ако имате изрази, които зависят един от друг:
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
Между тези заявки друг потребител може да промени таблицата Коли и да актуализира Продадено. За да предотвратите това, обвийте го в транзакция:
BEGIN;
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
COMMIT;
Транзакциите се поддържат от InnoDB, но не и от MyISAM.