Heim >Datenbank >MySQL-Tutorial >Detaillierte Erläuterung der Transaktionen in MySQL

Detaillierte Erläuterung der Transaktionen in MySQL

黄舟
黄舟Original
2017-09-11 11:39:061408Durchsuche

MySQL-Transaktion:

1. MySQL-Transaktionskontrollanweisung

(1). Transaktion öffnen

begin;

(3). Setzen Sie die Transaktion zurück

commit;

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

rollback;

Zum Beispiel:

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

Dies ist eine einfache Transaktion zum Einfügen von Daten

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

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

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

MySQL anzeigen Isolationsstufe

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

show variables like 'tx_isolation';
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;
(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;
(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;
***Implizite Transaktionseinreichung***:

3. InnoDB-Sperrmechanismus

alter table users engine = innodb;// 会造成事务的隐式提交
(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!

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