Používáte tabulky InnoDB nebo tabulky MyISAM? MySQL nepodporuje transakce na tabulkách MyISAM (ale neukáže vám chybu, pokud se je pokusíte použít). Také se ujistěte, že je vaše úroveň izolace transakcí správně nastavena, měla by být SERIALIZATELNÁ, což není výchozí nastavení pro MySQL.
Tento článek má dobrý příklad, který vysvětluje dopad různých úrovní izolace pomocí příkladu velmi podobného tomu vašemu.