Faire des transactions de base de données de prévenir des conditions de course?

Ce n'est pas tout à fait clair pour moi ce que les transactions dans les systèmes de base de données ne. Je sais qu'ils peuvent être utilisés pour la restauration d'une liste de mises à jour complètement (par exemple, déduire de l'argent sur un compte et l'ajouter à un autre), mais est-ce que tout ce qu'ils font? Plus précisément, peuvent-ils être utilisés pour prévenir des conditions de course? Par exemple:

// Java/JPA example
em.getTransaction().begin();
User u = em.find(User.class, 123);
u.credits += 10;
em.persist(u); // Note added in 2016: this line is actually not needed
em.getTransaction().commit();

(Je sais que cela pourrait être écrit comme une seule requête de mise à jour, mais ce n'est pas toujours le cas)

Est ce code protégés contre les conditions de course?

Je suis surtout intéressé à la MySQL5 + InnoDB, mais en général les réponses sont aussi les bienvenus.