So beheben Sie den Fehler beim MySQL-Transaktionsvorgang

So beheben Sie den Fehler beim MySQL-Transaktionsvorgang

So beheben Sie den Fehler beim MySQL-Transaktionsvorgang

Atomarität von Transaktionen: Eine Transaktion ist eine logische Arbeitseinheit in einer Datenbank. Alle in einer Transaktion enthaltenen Operationen werden entweder ausgeführt oder nicht ausgeführt.

Um Transaktionsatomarität zu erreichen, reicht ein einzelner Commit- oder Rollback-Befehl nicht aus, da beispielsweise der Commit-Befehl nur die erfolgreich ausgeführten DML-Anweisungen einer Transaktion an die Datenbank übermittelt. Wenn Sie die Atomizität von Transaktionen erreichen möchten, müssen Sie die Commit- und Rollback-Befehle in Verbindung mit einer Geschäftslogik im Programm verwenden. Der spezifische Geschäftslogikcode lautet wie folgt:

1. Phänomen

Die Transaktion wird im Programm zum Einfügen geöffnet, es erfolgt jedoch kein Commit. Die Daten in der Tabelle sind bereits vorhanden und die eingefügten Daten können auch bei einem Rollback nicht gelöscht werden.

2. Gründe

Die Speicher-Engine dieser Tabelle ist myisam, nicht innoDB, und unterstützt kein Transaktions-Rollback().

3. Lösung

Verwenden Sie „alter table xxxx engine = innoDB;“, um die Tabelle in die InnoDB-Engine zu ändern. Das Rollback erfolgt normal.

4. Code

 private void testCrud() {
     Verbindung conn = null; //Verbindungsobjekt PreparedStatement pstmt = null; //Vorkompiliertes SQL-Anweisungsobjekt try{
        //MySQL-Treiber laden Class.forName("com.mysql.jdbc.Driver");
        //Verbindungszeichenfolge String url = "jdbc:mysql://localhost:3306/test";
        //Datenbankverbindung herstellen conn = DriverManager.getConnection(url,"root","");
        //Transaktionsisolationsebene festlegen // conn.setTransactionIsolation(Connection. TRANSACTION_REPEATABLE_READ);
        //Autocommit auf „false“ setzen und Transaktion starten conn.setAutoCommit(false);
        //Update-Anweisung mit Parametern String sql = "INSERT INTO user_info (Benutzername, Passwort, Alter) Werte(?,?,?)";
        //Anweisung vorbereiten pstmt = conn.prepareStatement(sql);
        //Parameter binden, Aktualisierungsanweisung ausführen und 1000 Yuan vom Kontostand von Zhang San abziehen pstmt.setString(1, "zhangui");
        pstmt.setString(2, "1111");
        pstmt.setInt(3, 300);
        pstmt.execute();
        
        //Parameter binden, Aktualisierungsanweisung ausführen und den Kontostand von Li Si um 1.000 Yuan erhöhen// pstmt.setString(1, "zzzzzzzzzzzzzzzzz"); //Ungültige Parameter sind gebunden//pstmt.setString(2, "1111111111");
        //pstmt.setInt(3, 500);
        //pstmt.execute(); //Es wird eine SQL-Ausnahme ausgelöst //Transaktion festschreiben //conn.commit();
        System.out.println("Transaktion übermittelt, Übertragung erfolgreich!");
        //Close-Anweisung, Verbindung pstmt.close(); conn.close();
      }fang(Ausnahme e){
        versuchen{
          conn.rollback(); //Transaktion zurücksetzen System.out.println("Transaktion erfolgreich zurückgesetzt, es wurden keine Datensätze aktualisiert!");
        }fang(Ausnahme re){
          System.out.println("Rollback-Transaktion fehlgeschlagen!");
        }
        e.printStackTrace();
      }Endlich{
        wenn(pstmt!=null) versuche{pstmt.close();}fang(Ausnahme ignorieren){}
        if(conn!=null) versuche{conn.close();}catch(Ausnahme ignorieren){}
      }
    
  }

Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, danke für Ihre Unterstützung dieser Site!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der MySQL-Transaktionsverarbeitung
  • Analyse der vier Transaktionsisolationsstufen in MySQL anhand von Beispielen
  • Lösen Sie das Problem der Verkleinerung des Mysql-Transaktionsprotokolls und der Protokolldateien, die zu groß zum Verkleinern sind
  • Detaillierte Erläuterung der gespeicherten Prozeduren, Cursor und Transaktionsbeispiele von MySQL
  • Analyse gängiger Methoden für PHP-MySQL-Transaktionsvorgänge
  • Detaillierte Erläuterung der vier Transaktionsisolationsebenen in MySQL
  • NodeJs verwendet Mysql-Modul zur Implementierung eines Transaktionsverarbeitungsbeispiels
  • Detaillierte Erläuterung der Transaktionsisolierungsebenen der MySQL-Datenbank
  • Grundlegendes Lernen und Erfahrungsaustausch zu MySQL-Transaktionen

<<:  React implementiert den Beispielcode der Radiokomponente

>>:  Detaillierte Erläuterung zur Lösung des Problems, dass der Docker-Container nicht über IP auf den Hostcomputer zugreifen kann

Artikel empfehlen

In JavaScript integrierter Zeit- und Datumsformatierungsbeispielcode

1. Grundkenntnisse (Methoden von Datumsobjekten) ...

So legen Sie den Rahmen einer Webseitentabelle fest

<br />Zuvor haben wir gelernt, wie man Zelll...

So stellen Sie mit Docker ein einfaches C/C++-Programm bereit

1. Erstellen Sie zunächst eine Datei hello-world....

Alibaba Cloud beantragt ein kostenloses SSL-Zertifikat (https) von Cloud Shield

Da das Projekt den https-Dienst nutzen muss, habe...

So fügen Sie einer Tabelle in SQL Felder und Kommentare hinzu

1. Felder hinzufügen: Tabelle Tabellennamen änder...

JS Cross-Domain-XML – mit AS URLLoader

Kürzlich erhielt ich eine Anforderung für eine Fun...

So verwenden Sie das MySQL-Limit und lösen das Problem großer Paging-Aufgaben

Vorwort Wenn wir in der täglichen Entwicklung MyS...

So verwenden Sie benutzerdefinierte Tags in HTML

Benutzerdefinierte Tags können in XML- und HTML-Da...

Zusammenfassung der MySQL-Funktionsmethode LOAD_FILE()

In MySQL liest die Funktion LOAD_FILE() eine Date...

Linux-Datei-/Verzeichnisberechtigungen und Eigentümerverwaltung

1. Übersicht über Dateiberechtigungen und Eigentu...

MySQL-Abfrage – Erlernen grundlegender Abfrageoperationen

Vorwort MySQL ist das beliebteste relationale Dat...