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

Lösung für das MySQL-Fehlerproblem 1045 (28000)

Ich bin auf den MySQL-FEHLER 1045 gestoßen und ha...

js-Datentypen und Beispiele für ihre Beurteilungsmethoden

js-Datentypen Grundlegende Datentypen: Zahl, Zeic...

MySQL 1130-Ausnahme, Remote-Anmeldung nicht möglich – Lösung

Inhaltsverzeichnis Frage: 1. Aktivieren Sie die B...

Dieser Artikel zeigt Ihnen, wie Sie CSS wie JS-Module importieren

Inhaltsverzeichnis Vorwort Was sind erstellbare S...

Neue Einstellungen für Text und Schriftarten in CSS3

Textschatten Textschatten: horizontaler Versatz, ...

So ermitteln Sie die Höhe des MySQL InnoDB B+-Baums

Vorwort Der Grund, warum die InnoDB-Engine von My...

Ein unvollständiger Leitfaden zur JavaScript-Toolchain

Inhaltsverzeichnis Überblick Statische Typprüfung...

Detaillierte Erklärung des Rewrite-Moduls von Nginx

Das Umschreibmodul ist das Modul ngx_http_rewrite...

jQuery implementiert Akkordeon-Kleinbuchstaben

Dieser Artikel gibt Ihnen den spezifischen Code v...

So fragen Sie Bilder in einem privaten Register ab oder erhalten sie

Docker fragt Bilder in einem privaten Register ab...