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

Beim Website-Design sollte auf die Farbhierarchie geachtet werden

Ich habe kürzlich gesagt, dass Design ein Gefühl d...

So installieren Sie Nginx an einem bestimmten Ort im Centos-System

Wie installiere ich Nginx an einem bestimmten Ort...

Beispiel für die Implementierung von QR-Code-Scaneffekten mit CSS3

Online-Vorschau https://jsrun.pro/AafKp/ Erster B...

Was ist SSH? Wie benutzt man? Was sind die Missverständnisse?

Inhaltsverzeichnis Vorwort Was ist SSH? Wofür wir...

CSS-Pickup-Pfeile, Kataloge, Icons Implementierungscode

1. Verschiedene CSS-Symbole Es gibt drei Möglichk...

Erste Schritte mit der Konvertierung von Vue in React

Inhaltsverzeichnis Design Komponentenkommunikatio...

Detaillierte Einführung in die Linux-Hostnamenkonfiguration

Inhaltsverzeichnis 1. Konfigurieren Sie den Linux...

Detaillierte Erklärung der MySQL 8.0.18-Befehle

Öffnen Sie den gerade entpackten Ordner C:\web\my...

Der eigentliche Prozess der Einbindung von Axios in das Projekt

Inhaltsverzeichnis Vorwort Vorteile der Axios-Kap...

Verwendung der hasOwnProperty-Methode des js-Attributobjekts

Die Methode hasOwnProperty() des Objekts gibt ein...

Der Unterschied zwischen HTML-Block-Level-Tags und Inline-Tags

1. Blockebenenelement: bezieht sich auf die Fähigk...