Använder du InnoDB-tabeller eller MyISAM-tabeller? MySQL stöder inte transaktioner på MyISAM-tabeller (men det ger dig inget fel om du försöker använda dem). Se också till att din transaktionsisoleringsnivå är korrekt inställd, den bör vara SERIALIZABLE vilket inte är standard för MySQL.
Denna artikel har ett bra exempel som förklarar effekterna av de olika isoleringsnivåerna med ett exempel som liknar ditt.