Apakah Anda menggunakan tabel InnoDB atau tabel MyISAM? MySQL tidak mendukung transaksi pada tabel MyISAM (tetapi tidak akan memberikan kesalahan jika Anda mencoba menggunakannya). Juga, pastikan tingkat isolasi transaksi Anda diatur dengan benar, itu harus SERIALIZABLE yang bukan default untuk MySQL.
artikel ini memiliki contoh bagus yang menjelaskan dampak dari tingkat isolasi yang berbeda menggunakan contoh yang sangat mirip dengan Anda.