s transações do banco de dados impedem as condições de corrid

Não está totalmente claro para mim o que as transações nos sistemas de banco de dados fazem. Sei que eles podem ser usados para reverter completamente uma lista de atualizações (por exemplo, deduzir dinheiro em uma conta e adicioná-lo a outra), mas é isso que eles fazem? Especificamente, eles podem ser usados para evitar condições de corrida? Por exemplo

// 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();

(Eu sei que isso provavelmente poderia ser escrito como uma consulta de atualização única, mas esse não é sempre o caso)

Este código está protegido contra as condições da corrid

Estou muito interessado no MySQL5 + InnoDB, mas respostas gerais também são bem-vindas.

questionAnswers(4)

yourAnswerToTheQuestion