Detaillierte Erklärung zu MySQL und Springs Autocommit

Detaillierte Erklärung zu MySQL und Springs Autocommit

1 MySQL Autocommit-Einstellungen

MySQL führt standardmäßig automatisch Commits aus, was bedeutet, dass für jede DML-Anweisung (Hinzufügen, Löschen und Ändern) implizit ein Commit als separate Transaktion ausgeführt wird. Wenn der Status auf „Geschlossen“ geändert wird, muss die DML-Anweisung manuell übermittelt werden, damit sie wirksam wird.
Prüfen Sie, ob das Auto-Commit der aktuellen Sitzung aktiviert ist:

mysql> Variablen wie „autocommit“ anzeigen;
+---------------+-------+
| Variablenname | Wert |
+---------------+-------+
| Autocommit | EIN |
+---------------+-------+

Überprüfen Sie, ob das globale Auto-Commit aktiviert ist:

mysql> globale Variablen wie „autocommit“ anzeigen;
+---------------+-------+
| Variablenname | Wert |
+---------------+-------+
| Autocommit | EIN |
+---------------+-------+

Sie können den Vorgang ein- und ausschalten, indem Sie die Autocommit-Variable ändern.

Schalten Sie den Autocommit-Modus für die aktuelle Sitzung aus mysql> set autocommit=0;

 
mysql> Variablen wie „autocommit“ anzeigen;
+---------------+-------+
| Variablenname | Wert |
+---------------+-------+
| Autocommit | AUS |
+---------------+-------+

 Das globale Autocommit ist immer noch aktiviert mysql> zeige globale Variablen wie 'autocommit';
+---------------+-------+
| Variablenname | Wert |
+---------------+-------+
| Autocommit | EIN |
+---------------+-------+

 
 Globales Autocommit deaktivieren
mysql> globales Autocommit = 0 festlegen;

 
mysql> globale Variablen wie „autocommit“ anzeigen;
+---------------+-------+
| Variablenname | Wert |
+---------------+-------+
| Autocommit | AUS |
+---------------+-------+

Wenn der MySQL-Dienst nach dem Neustart weiterhin wirksam bleiben soll, müssen Sie Systemumgebungsvariablen festlegen. MySQL 5.7 Legen Sie den Autocommit-Wert unter [mysqld] in der cnf-Konfigurationsdatei fest.

[mysqld]
...
automatisches Commit = 0

Steuern der automatischen Übermittlung im Frühjahr

Das MySQL JDBC-Treiberpaket mysql-connector-java aktiviert standardmäßig Auto-Commit für die Sitzungsverbindung, beispielsweise der Code der Version mysql-connector-java-8.0.22:

//com.mysql.cj.protocol.a.NativeServerSession.java
  privater Boolescher Wert autoCommit = true;

Häufig verwendete Datenbankverbindungspools wie HikariCP, Druid usw. aktivieren standardmäßig auch Auto-Commit und ändern die Auto-Commit-Einstellungen der Verbindung auf „True“.
Druid setzt das Autocommit der Verbindung beim Initialisieren der Datenquelle auf „true“. Der Code lautet wie folgt:

com.alibaba.druid.pool.DruidAbstractDataSource.java
  geschützter flüchtiger Boolescher Wert defaultAutoCommit = true;
  ...
  public void initPhysicalConnection(Connection conn, Map<String, Object> variables, Map<String, Object> globalVariables) throws SQLException {
    wenn (conn.getAutoCommit() != defaultAutoCommit) {
      //Setze das Autocommit der Verbindung auf true
      conn.setAutoCommit(defaultAutoCommit);
    }
    ...
 
  }

HikariCP initialisiert DataSource mit Autocommit, das standardmäßig auf „true“ gesetzt ist:

com.zaxxer.hikari.HikariConfig.java
  öffentliche HikariConfig()
  {
   ...
   istAutoCommit = wahr;
  }

Bei expliziten Transaktionen, die vom Transaktionsmanager PlatformTransactionManager verwaltet werden (z. B. @Transactional-Annotationsdeklarationen), wird der Auto-Commit-Modus beim Öffnen der Transaktion deaktiviert. Der Code lautet wie folgt:

	@Überschreiben
	geschützt void doBegin(Objekttransaktion, Transaktionsdefinitionsdefinition) {
		DataSourceTransactionObject txObject = (DataSourceTransactionObject) Transaktion;
		Verbindung con = null;

		versuchen {
      		........

			// Wechseln Sie bei Bedarf zum manuellen Commit. Dies ist bei einigen JDBC-Treibern sehr aufwändig.
			// wir wollen es also nicht unnötig tun (wenn wir zum Beispiel explizit
			// der Verbindungspool wurde bereits so konfiguriert, dass er festgelegt wird).
			wenn (con.getAutoCommit()) {
				txObject.setMustRestoreAutoCommit(true);
				wenn (logger.isDebugEnabled()) {
					logger.debug("JDBC-Verbindung [" + con + "] auf manuelles Commit umstellen");
				}
                //Auto-Commit-Modus ausschalten con.setAutoCommit(false);
			}

      		.......
		}

		fangen (Wurfbeispiel) {
     		.......
		}
	}

Zusammenfassen

Der Autocommit-Modus von MySQL ist standardmäßig aktiviert. Um Fehler durch manuelle DML-Operationen zu vermeiden, kann die Produktionsumgebung auf den standardmäßigen geschlossenen Zustand gesetzt werden. Im Allgemeinen sind JDBC-Verbindungspools standardmäßig aktiviert und konfigurierbar. Bei einer expliziten Transaktion wird es auf den Status „Geschlossen“ gesetzt. Eine einfache Änderung des Autocommits der Datenbankumgebung hat keine Auswirkungen auf das Verhalten des Codes.

Oben finden Sie eine ausführliche Erläuterung zu MySQL und Springs Autocommit. Weitere Informationen zu MySQL Autocommit finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Eine kurze Analyse von SQL-Beispielen zum Auffinden nicht festgeschriebener Transaktionen in MySQL
  • Detailliertes Beispiel zur Implementierung von Transaktions-Commit und -Rollback in MySQL
  • So finden Sie Informationen zu nicht festgeschriebenen Transaktionen in MySQL
  • Detaillierte Erläuterung des Lese-Commits der MySQL-Transaktionsisolationsebene
  • Untersuchung der Auswirkungen von Indizes und Commit-Häufigkeit auf die Schreibgeschwindigkeit von InnoDB-Tabellen in MySQL
  • Lösung für viele Leerzeichen, wenn PHP Textbereichsdaten an MySQL übermittelt
  • MySQL implementiert Beispiele für Transaktions-Commits und -Rollbacks
  • Python stellt eine Verbindung zu MySQL her und übermittelt ein MySQL-Transaktionsbeispiel
  • JSP + MySQL Problem mit chinesischen verstümmelten Zeichen nach der Übermittlung Lösung für verstümmelte Zeichen

<<:  XHTML-Tutorial für den Einstieg: Häufig verwendete XHTML-Tags

>>:  Detaillierte Erläuterung der Prinzipien des tiefen und flachen Klonens von JavaScript-Arrays und Nicht-Array-Objekten

Artikel empfehlen

Automatische Sicherung der MySQL-Datenbank per Shell-Skript

Automatische Sicherung der MySQL-Datenbank per Sh...

Detaillierte Erläuterung der grundlegenden Docker-Netzwerkkonfiguration

Externer Zugriff Ports nach dem Zufallsprinzip zu...

Zusammenfassung der SQL-Deduplizierungsmethoden

Wenn wir SQL zum Extrahieren von Daten verwenden,...

8 Tipps für Vue, die Sie nach dem Lesen lernen werden

1. Verwenden Sie immer :key in v-for Die Verwendu...

So ändern Sie die inländische Quelle von Ubuntu 20.04 apt

UPD 2020.2.26 Derzeit ist Ubuntu 20.04 LTS noch n...

3 Möglichkeiten zum Hinzufügen von Links zu HTML-Auswahl-Tags

Der Erste : Code kopieren Der Code lautet wie folg...

Detaillierte Erklärung der Kartenüberlagerung in OpenLayers6

1. Overlay-Übersicht Overlay bedeutet Überlagerun...

JS implementiert den Beispielcode der Dezimalkonvertierung in Hexadezimal

Vorwort Beim Schreiben von Code stoßen wir gelege...

Navigationsdesign und Informationsarchitektur

<br />Wenn wir über Navigation sprechen, geh...

Neulinge lernen schnell die Schritte zum Erstellen von Website-Symbolen

<br />Original-URL: http://www.lxdong.com/po...

Beste Tools zum Erstellen und Bearbeiten von Screenshots unter Linux

Als ich mein primäres Betriebssystem von Windows ...