2016-04-18 16 views
3

Ich verwende zwei Fenster, wie ich das Konzept der Transaktion implementieren möchte.MySQL zeigt keine aktualisierten Daten auch nach dem Commit

Window1: begin;

Window1: update employee set salary = 45000 where ssn = '123456789';

Window2: begin;

Window2: select * from employee where ssn = '123456789';

Hier zeigt dieser Befehl mir vorherigen Daten, die korrekt ist.

Window1: commit;

Window2: select * from employee where ssn = '123456789';

Hier sollte ich das aktualisierte Gehalt von 45000 erhalten Aber mein Fenster 2 zeigt nur vorherigen Daten. Wo mache ich den Fehler?

Antwort

1

Ihre Erwartungen sind falsch, das ist alles. Was Transaktionen von der Arbeit des anderen sehen, wird durch die sogenannte transaction isolation levels bestimmt. Standardmäßig MySQL verwendet repeatable read isolation level, was bedeutet:

Wenn die Isolationsstufe WIEDERHOLBARE READ (der Standard Pegel) ist, liest alle konsistent innerhalb derselben Transaktion die snapshot durch die erste derartige Lese daß etablierte gelesen Transaktion. Sie können einen frischeren Snapshot für Ihre Abfragen erhalten, indem Sie die aktuelle Transaktion festschreiben und danach neue Abfragen absetzen.

Sie können die Isolationsstufe ändern verpflichtet zu lesen, das Verhalten zu ermöglichen Sie erwarten:

Mit READ COMMITTED Isolationsstufe, jede konsistente Lese innerhalb einer Transaktion setzt und lesen seine eigene frische Snapshot.

+0

danke für Ihre Antwort. Aber ich möchte nur wissen, wie man die DEFAULT TRANSACTION ISOLATION LEVEL in My SQL ändert, um GLOBAL zu lesen. –

+0

Siehe mysql-Handbuch zur Einstellung der Transaktionssyntax. – Shadow

Verwandte Themen