Implementierung der Knotenverbindung zur MySQL-Abfragetransaktionsverarbeitung

Implementierung der Knotenverbindung zur MySQL-Abfragetransaktionsverarbeitung

Ich habe MySQL oft verwendet und spiele hauptsächlich mit NodeJS. Ich habe einen Artikel speziell darüber geschrieben, wie man nodejs mit mysql Datenbank verbindet. Bitte prüfen Sie vor der Nutzung, ob Ihr Computer über folgende Umgebung verfügt!

  • Die Node.JS-Ausführungsumgebung.
  • MySQL-Datenbankumgebung (Download-Adresse).
  • Navicat ist eine grafische Betriebssystemsoftware, die eine Verbindung zu einer MySQL-Datenbank herstellt. (optional)

Geben Sie das Thema MySQL ein: Hinzufügen, Löschen, Ändern und Abfragen

Zuerst laden wir ein Abhängigkeitspaket namens mysql herunter. Dieses Paket stellt über NodeJS-Code eine Verbindung zur Datenbank her, um die Datenbank zu betreiben.

Erstellen Sie einen Ordner und generieren Sie schnell die Datei pakeage.json

D:\nodejs_mysql>npm init -y # Schnelles Erstellen von Paketverwaltungsdateien

Abhängigkeiten installieren

D:\nodejs_mysql>npm i mysql -D # MySQL-Abhängigkeitspaket installieren

Erstellen Sie eine index.js Datei mit dem folgenden Code

const mysql = erfordern("mysql");

// Einen MySQL-Verbindungspool erstellen const pool = mysql.createPool({
  Host: "127.0.0.1", // Die Adresse 127.0.0.1 für die Verbindung zur Datenbank ist die lokale MySQL
  Benutzer: „root“, // Benutzername für die Verbindung mit der Datenbank. Root hat die höchste Autorität. Passwort: „“, // Passwort für die Verbindung mit der Datenbank. Datenbank: „apm“, // Datenbankname für den Vorgang. Port: „3306“, // Portnummer für die Verbindung mit MySQL. multipleStatements: true, // Dieses Element kann ignoriert werden, wenn Sie mehrere SQL-Anweisungen gleichzeitig ausführen möchten. });

Funktion select() {
  // Anfrage zur Verbindung mit MySQL
  pool.getConnection((err, Verbindung) => {
    //Bei fehlgeschlagener Verbindung einen Fehler melden if (err) throw err;
    // Holen Sie sich ein Verbindungsobjekt und rufen Sie die Abfragemethode auf, um die SQL-Anweisung auszuführen. let sql = "select * from goods";
    //Führen Sie die SQL-Anweisungsabfrage aus. Der zweite Parameter ist der von der SQL-Anweisung benötigte Parameter. Sie können ihn leer lassen. connection.query(sql, (errors, results, fields) => {
      // Verbindung freigeben connection.release();
      // Wenn beim Ausführen der SQL-Anweisung ein Fehler auftritt, werfen Sie einen Fehler, wenn (Fehler) Fehler werfen;
      console.log(Ergebnisse);
      konsole.log(Felder);
    });
  });
}

wählen();

Der obige Code fragt die Daten einer Datentabelle goods in der apm Datenbank ab. results sind die aus der Datenbank abgerufenen Daten.

Die Kapselungsmethode verwendet Promise , um die Datenbank abzufragen

// index.js
// ... Ignorieren Sie den vorherigen Code, um einen MySQL-Verbindungspool zu erstellen. Funktion query(sql, params) {
  returniere neues Promise((lösen, ablehnen) => {
    pool.getConnection((err, Verbindung) => {
      //Bei fehlgeschlagener Verbindung einen Fehler melden if (err) return reject(err);
      // Holen Sie sich ein Verbindungsobjekt und rufen Sie die Abfragemethode auf, um die SQL-Anweisung auszuführen. // Führen Sie die SQL-Anweisungsabfrage aus. Der zweite Parameter ist der von der SQL-Anweisung benötigte Parameter. Dieser kann weggelassen werden. connection.query(sql, params, (errors, results, fields) => {
        // Verbindung freigeben connection.release();
        // Wenn beim Ausführen der SQL-Anweisung ein Fehler auftritt, wird ein Fehler ausgegeben, if (Fehler) return reject(Fehler);
        Lösung (Ergebnisse);
      });
    });
  });
}

Abfrage("Wählen Sie * aus Waren aus", null).dann((Ergebnis) => {
  console.log(Ergebnis);
});
modul.exporte = {
  Abfrage,
};

verwenden

// Daten.js
const index = erfordern("./index.js");
var sql = "Wählen Sie * aus Waren aus";
Index
  .query(sql, null)
  .then((Ergebnis) => {
    // irgendetwas tun …
  })
  .catch((err) => {
    // Fehler
    console.log(fehler);
  });

Dadurch wird eine Schnittstelle für die Datenbank bereitgestellt, um SQL auszuführen. Verwenden Sie .then , um Aufrufe durch promise zu verketten.

MySQL-Transaktionsverarbeitung

Ich werde nicht zu sehr ins Detail gehen, was MySQL-Transaktionen betrifft. Hier ist ein Link für Ihre Bequemlichkeit. MySQL-Transaktionsverarbeitung

Kommen wir direkt zur Sache und verwenden promise , um die MySQL-事務處理zu kapseln.

// index.js

// .... Teil des Codes zum Erstellen eines Pools /**
 * MySQL-Transaktionsverarbeitung * @param {Array} SQLS-SQL-Anweisung, die ausgeführt werden soll * @param {Array} Parameter, die den Parametern der obigen SQL-Anweisung entsprechen * @returns {Promise} gibt ein Promise zurück
 */
Funktion Transaktion (SQL, Parameter) {
  returniere neues Promise((lösen, ablehnen) => {
    pool.getConnection(Funktion (err, Verbindung) {
      // Verbindung fehlgeschlagen Promise gibt Fehler direkt zurück if (err) {
        Rückgabe ablehnen (Fehler);
      }
      // Wenn Anweisung und Parameternummer nicht übereinstimmen, gibt Promise direkt einen Fehler zurück, if (sqls.length !== params.length) {
        connection.release(); // Freigeben return reject(new Error("Die Anweisung stimmt nicht mit dem übergebenen Wert überein"));
      }
      // Ausführung der Transaktion starten connection.beginTransaction((beginErr) => {
        // Transaktion konnte nicht erstellt werden if (beginErr) {
          Verbindung.Freigabe();
          Rückgabe ablehnen (BeginErr);
        }
        console.log("Starten Sie die Ausführung von Transaktionen, insgesamt " + sqls.length + " Anweisungen");
        //Gibt ein Promise-Array zurück let funcAry = sqls.map((sql, index) => {
          gib ein neues Promise zurück((sqlResolve, sqlReject) => {
            const Daten = Parameter[Index];
            Verbindung.Abfrage(sql, Daten, (sqlErr, Ergebnis) => {
              wenn (sqlErr) {
                gibt sqlResolve(sqlErr) zurück;
              }
              sqlReject(Ergebnis);
            });
          });
        });
        //Verwende die Methode „all“, um den Status jedes darin enthaltenen Promise zu überprüfen. Promise.all(funcAry)
          .then((arrResult) => {
            // Wenn jede SQL-Anweisung erfolgreich ausgeführt wurde, kommt es zu diesem Punkt. Hier muss die Transaktion festgeschrieben werden, damit die vorherige SQL-Ausführung wirksam wird. // Die Transaktion festschreiben connection.commit(function (commitErr, info) {
              wenn (commitErr) {
                // Übermittlung der Transaktion fehlgeschlagen console.log("Übermittlung der Transaktion fehlgeschlagen: " + commitErr);
                // Transaktions-Rollback, zuvor ausgeführte SQL-Anweisungen sind ungültig connection.rollback(function (err) {
                  if (err) console.log("Rollback fehlgeschlagen: " + err);
                  Verbindung.Freigabe();
                });
                // Status des fehlgeschlagenen Versprechens zurückgeben return reject(commitErr);
              }

              Verbindung.Freigabe();
              // Die Transaktion gibt das Ergebnis jeder SQL-Ausführung erfolgreich als Array-Struktur zurück: resolve(arrResult);
            });
          })
          .catch((Fehler) => {
            // Wenn eine der mehreren SQL-Anweisungen während der Ausführung einen Fehler meldet, führen Sie direkt ein Rollback durch connection.rollback(function () {
              console.log("SQL-Ausführung fehlgeschlagen: " + Fehler);
              Verbindung.Freigabe();
              ablehnen(Fehler);
            });
          });
      });
    });
  });
}
modul.exporte = {
  Transaktion,
};

Danach müssen Sie nur noch diese Methode aufrufen, um die MySQL-Transaktion auszuführen

// Daten.js
const index = erfordern("./index.js");
var sqls = [
  „Löschen von Waren, wobei Waren-ID = ?“, // Löschanweisung „Warensatz aktualisieren, Num = ?, wobei Waren-ID = ?;“, // Aktualisierungsanweisung];
var Parameter = [
  [1], // parmas liegt im Array-Format vor und entspricht der SQL-Anweisung in SQLs? [5, 3],
];

Index
  .transaction(sqls, Parameter)
  .then((arrResult) => {
    // irgendetwas tun …
  })
  .catch((err) => {
    // Fehler
    console.log(fehler);
  });

Dies ist das Ende dieses Artikels über die Implementierung der Knotenverbindungs-MySQL-Abfragetransaktionsverarbeitung. Weitere relevante Inhalte zur Knotenverbindungs-MySQL-Abfragetransaktionsverarbeitung finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • So implementieren Sie verteilte Transaktionen in MySQL XA
  • Beispiel-Tutorial für MySQL-Datenbanktransaktionen
  • Sieben Lösungen für klassische verteilte Transaktionen zwischen MySQL und Golan
  • Analyse und Zusammenfassung der Auswirkungen von MySQL-Transaktionen auf die Effizienz
  • Details zur MySQL-Transaktionsisolationsebene
  • Detaillierte Erklärung der Transaktionen und Indizes in der MySQL-Datenbank
  • MySQL-Transaktionsanalyse

<<:  Diskussion über die Browsing-Designmethode für Webseiteninhalte

>>:  Detaillierte Erläuterung der MySQL-Datenbankisolationsebene und des MVCC

Artikel empfehlen

Wie Sie die redundanten Felder der Datenbank sinnvoll nutzen

Privot ist die Zwischentabelle von Viele-zu-viele...

MySQL Online-DDL-Tool Gh-Ost-Prinzipanalyse

Inhaltsverzeichnis 1. Einleitung 1.1 Grundsatz 1....

Layui implementiert Beispielcode für Abfragen mit mehreren Bedingungen

Ich habe vor kurzem ein Dateisystem erstellt und ...

Zusammenfassung der häufigsten Fehler im Webdesign

Bei der Gestaltung einer Webseite passieren Desig...

Einige Referenzen zu Farben in HTML

In HTML werden Farben auf zwei Arten dargestellt. ...

Prinzip des Linux-Nohup-Befehls und Beispielanalyse

nohup-Befehl Bei der Verwendung von Unix/Linux mö...

So berechnen Sie mit Linux den von zeitgesteuerten Dateien belegten Speicherplatz

Öffnen Sie den Editor für geplante Aufgaben. Cent...

CentOS-System-RPM-Installation und -Konfiguration von Nginx

Inhaltsverzeichnis CentOS RPM-Installation und Ko...

Vue implementiert Sternebewertung mit Dezimalstellen

In diesem Artikel wird der spezifische Code von V...

Detaillierte Erläuterung zur Verwendung der WeChat-Miniprogrammkarte

In diesem Artikelbeispiel wird der spezifische Im...