In diesem Artikel werden hauptsächlich relevante Informationen zur detaillierten Erläuterung der Transaktionsisolationsstufe MySQL-Datenbank vorgestellt. Bedürftige Freunde können sich auf
Datenbanktransaktionsisolationsstufe
Es gibt 4 Isolationsstufen für Datenbanktransaktionen, von niedrig bis hoch:事务级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
Read uncommitted | √ | √ | √ |
Read committed | × | √ | √ |
Repeatable read | × | × | √ |
Serializable | × | × | × |
Dirty Read, Phantom Read, nicht wiederholbarer Read
Dirty Read:
Dirty Read bedeutet, wenn eine Transaktion stattfindet in Bearbeitung Auf die Daten wird zugegriffen und sie werden geändert, die Änderung wurde jedoch noch nicht an die Datenbank übermittelt. Zu diesem Zeitpunkt greift auch eine andere Transaktion auf die Daten zu und verwendet sie dann.Nicht wiederholbares Lesen:
bezieht sich auf das mehrmalige Lesen derselben Daten innerhalb einer Transaktion. Bevor diese Transaktion endet, greift auch eine andere Transaktion auf dieselben Daten zu. Dann können zwischen den beiden Lesevorgängen der Daten in der ersten Transaktion aufgrund der Änderung der zweiten Transaktion die von der ersten Transaktion zweimal gelesenen Daten unterschiedlich sein. Auf diese Weise sind die innerhalb einer Transaktion zweimal gelesenen Daten unterschiedlich und werden daher als nicht wiederholbares Lesen bezeichnet. (Das heißt, derselbe Dateninhalt kann nicht gelesen werden)Phantomlesung:
bezieht sich auf ein Phänomen, das auftritt, wenn Transaktionen wie die erste nicht unabhängig voneinander ausgeführt werden Transaktion Die Daten in einer Tabelle wurden geändert, und diese Änderung betrifft alle Datenzeilen in der Tabelle. Gleichzeitig werden durch die zweite Transaktion auch die Daten in dieser Tabelle geändert. Durch diese Änderung wird eine Zeile mit neuen Daten in die Tabelle eingefügt. Dann wird der Benutzer, der die erste Transaktion ausführt, in Zukunft feststellen, dass die Tabelle immer noch unveränderte Datenzeilen enthält, als ob eine Halluzination aufgetreten wäre. Beispiel: Tabelle:CREATE TABLE `cc_wsyw126_user_test_isolation_copy` ( `id` int(11) NOT NULL AUTO_INCREMENT, `password` varchar(64) NOT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `ix_age` (`age`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `cc_wsyw126_user_test_isolation_copy` (`password`, `age`) VALUES ('1', 1), ('2', 2), ('3', 3), ('4', 4);
start transaction insert into cc_wsyw126_user_test_isolation_copy (password, age) values ('5',5) commit
start transaction update cc_wsyw126_user_test_isolation_copy set age = 2 where password >='2' select * from cc_wsyw126_user_test_isolation_copy where password >= '2'; commit
Schritte zum Reproduzieren:
Solange die Einfügeanweisung von Transaktion A vor der Transaktionsauswahl und nach der Aktualisierung von Transaktion B steht. Die MySQL InnoDB-Speicher-Engine implementiert ein Multiversions-Parallelitätskontrollprotokoll –MVCC (Multi-Version Concurrency Control) plus Gap-Lock-Strategie (next -Key Locking). verfügt über keine Phantom-Lesevorgänge unter der Isolationsstufe „Repeatable Read“ (RR). Wenn Sie das Phantomlesen testen möchten, versuchen Sie es unter MyISAM.
Wenn in einem Cluster--Index (Primärschlüsselindex) eine Eindeutigkeits--Einschränkung besteht, stuft InnoDB die standardmäßige Next-Key-Sperre auf eine Datensatzsperre herab.
Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die Isolationsstufen für MySQL-Datenbanktransaktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!