Instrukcje SQL są niepodzielne. To znaczy, jeśli wykonasz coś takiego:
UPDATE Cars SET Sold = Sold + 1
Nikt nie może zmienić Sold
zmienna podczas tego oświadczenia. Jest zawsze zwiększany o 1, nawet jeśli ktoś inny jednocześnie wykonuje tę samą instrukcję.
Problem pojawia się, jeśli masz zdania, które są od siebie zależne:
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
Pomiędzy tymi zapytaniami inny użytkownik może zmienić tabelę Samochody i zaktualizować Sprzedane. Aby temu zapobiec, zapakuj go w transakcję:
BEGIN;
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
COMMIT;
Transakcje są obsługiwane przez InnoDB, ale nie przez MyISAM.