Verhindern Datenbank-Transaktionen Race Conditions?

Es ist mir nicht ganz klar, welche Transaktionen in Datenbank-Systemen tun. Ich weiß, Sie können verwendet werden, um ein rollback der Update-Liste komplett (z.B. abziehen von Geld auf ein Konto und fügen Sie es zu einem anderen), aber ist das alles, was Sie tun? Insbesondere können Sie verwendet werden, um zu verhindern, dass race conditions? Zum Beispiel:

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

(Ich weiß, das könnte wahrscheinlich so geschrieben werden, als ein einzelnes update-Abfrage, aber das ist nicht immer der Fall ist)

Ist dieser code geschützt gegen race conditions?

Ich bin hauptsächlich daran interessiert, MySQL5 + InnoDB, aber Allgemeine Antworten sind auch willkommen.

InformationsquelleAutor der Frage Bart van Heukelom | 2011-06-25

Schreibe einen Kommentar