Heim > Datenbank > MySQL-Tutorial > Hauptteil

Detaillierte Erläuterung der Transaktionen in MySQL

黄舟
Freigeben: 2017-09-11 11:39:06
Original
1387 Leute haben es durchsucht

MySQL-Transaktion:

1. MySQL-Transaktionskontrollanweisung

(1). Transaktion öffnen

begin;
Nach dem Login kopieren

(3). Setzen Sie die Transaktion zurück

commit;
Nach dem Login kopieren

(4). Legen Sie fest, ob die Transaktion automatisch festgeschrieben wird

rollback;
Nach dem Login kopieren

Zum Beispiel:

set autocommit = {0 | 1}; // 0不自动提交,1自动提交
Nach dem Login kopieren

Dies ist eine einfache Transaktion zum Einfügen von Daten

begin;// 开启事务
insert into table_name values(内容);
commit;// 提交事务
Nach dem Login kopieren

Dies ist eine einfache Rollback-Transaktion zum Einfügen von Daten

begin;// 开启事务
insert into table_name values(内容);// 后悔了,不想插入数据了
rollback;// 回滚,取消这次的事务操作
Nach dem Login kopieren
2. MySQL-Transaktionsisolationsanweisung

MySQL anzeigen Isolationsstufe

(1).read-uncommitted (nicht festgeschriebenen Inhalt lesen)

show variables like 'tx_isolation';
Nach dem Login kopieren
Dirty Read (Probleme verursacht);

Ein Benutzer zweimal Der Inhalt in der Abfrage Die Ergebnisse sind unterschiedlich.

Legen Sie die Standardisolationsstufe fest (Sie müssen sich erneut anmelden, nachdem die Einstellung abgeschlossen ist):

Zwei Benutzer melden sich gleichzeitig bei der Datenbank an und Die Transaktion führt jeweils Additions-, Lösch- und Änderungsvorgänge aus, und die Transaktion eines anderen Benutzers führt nur Abfragevorgänge aus. Ersterer schließt den Vorgang ab, ohne ihn festzuschreiben, und letzterer kann die Vorgangsergebnisse sehen Zu diesem Zeitpunkt werden bei der Abfrage keine anderen Ergebnisse angezeigt als beim letzten Mal (d. h. das Ergebnis ohne Operation). Dies ist das Dirty-Read-Problem

set global transaction isolation level read uncommitted;
Nach dem Login kopieren
(2).read commit (read). der übermittelte Inhalt)

Transaktionen können nur Änderungen sehen, die von festgeschriebenen Transaktionen vorgenommen wurden, und dieselbe Abfrage kann unterschiedliche Ergebnisse zurückgeben. Diese Ebene führt zu nicht wiederholbaren Leseproblemen.

Legen Sie die Standardisolationsstufe fest (. Sie müssen sich erneut anmelden, nachdem die Einstellung abgeschlossen ist) ):

In einer Transaktion habe ich zwei unterschiedliche Abfrageergebnisse gesehen (ähnlich wie bei Dirty Read).

set global transaction isolation level read committed;
Nach dem Login kopieren
(3). wiederholbares Lesen(wiederholbares Lesen)

Es kann sichergestellt werden, dass mehrere Instanzen derselben Transaktion beim gleichzeitigen Lesen von Daten dieselben Datenzeilen sehen (Mornar-Isolationsstufe der Datenbank).

Legen Sie den Standardwert fest Isolationsstufe (Einstellung abgeschlossen. Danach müssen Sie sich erneut anmelden):

Das heißt, in einer Transaktion sind die in dieser Transaktion abgefragten Ergebnisse immer dieselben, unabhängig davon, wie ein anderer Benutzer die Daten ändert .

set global transaction isolation level repeatable read;
Nach dem Login kopieren
***Implizite Transaktionseinreichung***:

3. InnoDB-Sperrmechanismus

alter table users engine = innodb;// 会造成事务的隐式提交
Nach dem Login kopieren
(1). , eine Transaktion wird gesperrt. Alle Datensätze in dieser Tabelle können nicht von anderen Transaktionen bearbeitet werden.

(2). Wenn eine Tabelle einen Primärschlüssel oder Index enthält, sperrt eine Transaktion eine bestimmte Datenzeile in der Tabelle, die sie bearbeitet, und sperrt nicht die gesamte Tabelle In dieser Tabelle ist dieses Mal nicht betroffen. Es ist zu beachten, dass die Sperre auf Zeilenebene hier eine Lückensperre ist. Das heißt, wenn Sie bestimmte Datenzeilen ändern, z. B. n Datenzeilen mit der ID < 10. = , dann id = 11 Die Daten werden ebenfalls gesperrt, was beachtet werden muss.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Transaktionen in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage