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

MySQL 5.7.12 Installations- und Konfigurations-Tutorial unter Mac OS 10.11

So installieren und konfigurieren Sie MySQL auf M...

So bedienen Sie Datei- und Ordnerberechtigungen unter Linux

Linux-Dateiberechtigungen Überprüfen wir zunächst...

Funktionsprinzip und Beispielanalyse des Linux-NFS-Mechanismus

Was ist NFS? Netzwerkdateisystem Eine Methode ode...

Einführung in die Leistungsoptimierung von MySQL-Datenbanken

Inhaltsverzeichnis Warum optimieren? ? Wo soll ic...

Detaillierte Erklärung des JavaScript ES6-Moduls

Inhaltsverzeichnis 0. Was ist ein Modul 1.Modul l...

Methode zum dynamischen Laden von Geojson basierend auf Vue+Openlayer

Laden eines oder mehrerer Features <Vorlage>...

Zusammenfassung der MySQL-Anweisungen

Inhaltsverzeichnis 1. Datenbank USE auswählen 2. ...

Blog-Design Webdesign-Debüt

Die erste Webseite, die ich entworfen habe, sieht...