Heim  >  Artikel  >  Datenbank  >  Detaillierte Einführung in die Isolationsstufen für MySQL-Datenbanktransaktionen

Detaillierte Einführung in die Isolationsstufen für MySQL-Datenbanktransaktionen

黄舟
黄舟Original
2017-03-16 13:38:111537Durchsuche

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:

  1. Nicht festgeschrieben lesen: Dirty Reads sind zulässig.

  2. Festgeschriebener Lesevorgang: Verhindert Dirty Reads, die am häufigsten verwendete Isolationsstufe und die Standardisolationsstufe für die meisten Datenbanken.

  3. Wiederholbares Lesen: Kann fehlerhafte und nicht wiederholbare Lesevorgänge verhindern.

  4. Serialisierbar: Es kann Dirty Reads, nicht wiederholbare Lesevorgänge und Phantomlesevorgänge verhindern, was (Transaktionsserialisierung) die Effizienz der Datenbank verringert.

Diese vier Ebenen können Probleme wie Dirty Reads, nicht wiederholbare Reads und Phantom Reads einzeln lösen.

√: Kann auftreten ×: Wird nicht auftreten

事务级别 脏读 不可重复读 幻读
Read uncommitted
Read committed ×
Repeatable read × ×
Serializable × × ×
Hinweis: Wir diskutieren Isolationsstufenszenarien, hauptsächlich im Fall mehrerer gleichzeitiger Transaktionen.

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;
Simulierte Daten:

INSERT INTO `cc_wsyw126_user_test_isolation_copy` (`password`, `age`) 
VALUES 
('1', 1),
('2', 2),
('3', 3),
('4', 4);
Erste Transaktion A:

start transaction 
insert into cc_wsyw126_user_test_isolation_copy (password, age) values ('5',5)
commit
Zweite Transaktion B:

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn