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

Analysieren Sie den Unterschied zwischen berechnet und beobachtet in Vue

Inhaltsverzeichnis 1. Einführung in die Computert...

So implementieren Sie die Kontrollkästchen- und Radioausrichtung

Nicht nur das Verhalten verschiedener Browser ist...

So ändern Sie das Passwort des Root-Benutzers in MySQL

Methode 1: Verwenden Sie den Befehl SET PASSWORD ...

So fragen Sie ab, ob die MySQL-Tabelle gesperrt ist

Spezifische Methode: (Empfohlenes Tutorial: Lern-...

MySQL-Interviewfragen: So richten Sie Hash-Indizes ein

Zusätzlich zu den B-Tree-Indizes bietet MySQL auc...

So fügen Sie Konfigurationsoptionen zum Discuz!-Forum hinzu

Discuz! Forum verfügt über zahlreiche Konfiguratio...

Zabbix konfiguriert DingTalks Alarmfunktion mit Bildern

Umsetzungsideen: Zunächst müssen die Alarminforma...

Detaillierte Erläuterung des Beispiels einer MySQL-Einzeltabellenabfrage

1. Daten vorbereiten Die folgenden Operationen we...

Einführung in die Anwendung der HTML-Tags superscript sup und subscript sub

HTML-Tag: hochgestellt In HTML definiert das <s...