Heim >Datenbank >MySQL-Tutorial >Detaillierte Erläuterung der Transaktionen in MySQL
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!