Ein vollständiges Beispiel für die Abfrage von Batchdaten aus einer Tabelle durch MySQL und deren Einfügen in eine andere Tabelle

Ein vollständiges Beispiel für die Abfrage von Batchdaten aus einer Tabelle durch MySQL und deren Einfügen in eine andere Tabelle

Sag es im Voraus

Nodejs liest die Datenbank als asynchronen Vorgang, sodass der Code weiterhin ausgeführt wird, bevor die Datenbank die Daten gelesen hat.
Als ich kürzlich etwas schrieb, musste ich die Datenbank nach Batchdaten abfragen und diese in eine andere Tabelle einfügen.
Bei Batchvorgängen ist die For-Schleife die einfachste Lösung.

Falsche Version der For-Schleife

Geben Sie zuerst den Code frei und erklären Sie ihn im Voraus. Hier ist die Kapselung des SQL-Vorgangs: sql.sever (Datenbankverbindungspool, Spleißfunktion für SQL-Anweisungen, Rückruffunktion).

für (lass i = 0; i <views.xuehao.length; i++) {
	sql.sever(Pool,sql.select(["Name"],"Registrierungsinformationen",["xuehao="+sql.escape(views.xuehao[i])]),Funktion(Daten){
  sql.sever(pool,sql.insert("personnelqueue",["xuehao","name","selfgroup","time"],[sql.escape(views.xuehao[i]),data[0].name,selfgroup,'NOW()'],true),function(){
  let allGroup = ['Android', 'ios', 'Web', 'Backend', 'Product']; //Hier ist der E-Mail-bezogene Code let group = allGroup[selfgroup - 1];
  let mailmsg = "Hallo," + group + "Die Gruppengenehmigungsliste wurde übermittelt, bitte überprüfen Sie sie so bald wie möglich!";
  mail.mailepass(mailmsg);
  res.schreiben(JSON.stringify({
   Stil: 1,
   msg:"Die Liste wurde übermittelt und wartet auf die Überprüfung durch den Administrator!"
  }));
  res.ende();
  })
 })
}

Im obigen Code wird zuerst die Datenabfrage und dann die Dateneinfügung durchgeführt (hier gehen wir davon aus, dass es 2 Daten gibt). Nach gesundem Menschenverstand ist die gewünschte Ausführungsreihenfolge: Abfrage einfügen, Abfrage einfügen. Allerdings ist es nicht so einfach, wie wir denken. Obwohl der Einfügevorgang tatsächlich in den Rückruf der Datenbankabfrage geschrieben wird, lautet die tatsächliche Reihenfolge: Abfrageabfrage. Sobald zwei Abfragen direkt ausgeführt werden, meldet der nachfolgende Code einen Fehler. Bevor der Rückruf erfolgen kann, wurde die zweite Schleife bereits ausgeführt.

Verbesserte for-Loop-Version

MySQL kann die Abfrage und Einfügung mit einer Anweisung abschließen, das Format ist: INSERT IGNORE INTO insert table table name (item1, item2) SELECT item1, item2 FROM query table table name WHERE, daher habe ich mir folgende Lösung überlegt.

für (lass i = 0; i < views.xuehao.length; i++) {
 sql.sever(pool, 'INSERT IGNORE INTO personnelqueue (xuehao,name,selfgroup,time) SELECT xuehao,name,selfgroup,NOW() FROM registryinformation WHERE xuehao=' + sql.escape(views.xuehao[i]) + ' und pass=' + status, funktion () {
  wenn (i == Ansichten.xuehao.Länge - 1) {
   let allGroup = ['Android', 'ios', 'Web', 'Backend', 'Produkt'];
   lass Gruppe = alleGruppe[Selbstgruppe - 1];
   let mailmsg = "Hallo," + group + "Die Gruppengenehmigungsliste wurde übermittelt, bitte überprüfen Sie sie so bald wie möglich!";
   mail.mailepass(mailmsg);
   res.schreiben(JSON.stringify({
    Stil: 1,
    msg: "Die Liste wurde übermittelt und wartet auf die Überprüfung durch den Administrator!"
   }));
   res.ende();
  }
 })
} 

Auf diese Weise funktioniert die Datenbank ordnungsgemäß und ihr Zweck wird erreicht. Doch bei genauerem Nachdenken weist dieser Ansatz noch immer Mängel auf. Bei kleinen Datenmengen ist das kein Problem, bei großen Datenmengen führt dies jedoch dazu, dass das Programm mehrere Verbindungen mit der Datenbank herstellen muss, was die Serverlast erhöht.

Verbesserte Version

In Kombination mit dem vorherigen Defekt müssen wir, wie der Name schon sagt, dieses Mal die Anzahl der Verbindungen des Programms mit der Datenbank reduzieren. Daher schreiben wir Einfügung und Abfrage nicht mehr zusammen, sondern trennen sie und führen Einfügung und Abfrage im Stapelbetrieb durch, um so die abgefragten Daten für die Stapeleinfügung zu verwenden. Der Code lautet wie folgt:

let sqlString = 'SELECT xuehao,name,selfgroup FROM registryinformation WHERE pass=' + status + ' AND (xuehao=' + sql.escape(views.xuehao[0]);
für (lass i = 1; i < views.xuehao.length; i++) {
 sqlString += ' ODER xuehao=' + sql.escape(views.xuehao[i]);
}
: Der SQL-String ist eine Zeichenfolge, die die Daten enthält, die Sie in SQL Server verwenden.
sql.sever(Pool, SQLString, Funktion (Daten) {
 //SQL-Anweisungen spleißen und einfügen let istSqlStr = 'INSERT IGNORE INTO personnelqueue (xuehao,name,selfgroup,time) VALUES (' + data[0].xuehao + ',' + sql.escape(data[0].name) + ',' + data[0].selfgroup + ',NOW())';
 für (let j = 1; j < data.length; j++) {
 istSqlStr += ',(' + data[j].xuehao + ',' + sql.escape(data[j].name) + ',' + data[j].selfgroup + ',' + 'JETZT())';
 }
 sql.sever(pool, istSqlStr, function () {
 let allGroup = ['Android', 'ios', 'Web', 'Backend', 'Produkt'];
 lass Gruppe = alleGruppe[Selbstgruppe - 1];
 let mailmsg = "Hallo," + group + "Die Gruppengenehmigungsliste wurde übermittelt, bitte überprüfen Sie sie so bald wie möglich!";
 mail.mailepass(mailmsg);
 res.schreiben(JSON.stringify({
  Stil: 1,
  msg: "Die Liste wurde übermittelt und wartet auf die Überprüfung durch den Administrator!"
 }));
 res.ende();
 })
})

Auffüllen

Syntax für Batchabfragen (und und oder werden hier gemischt) SELECT Spaltenname, Spaltenname FROM Tabellenname WHERE Bedingung AND (Element1='xxx' ODER Element1='yyy');
Eine Anweisung für die Batch-Einfügesyntax INSERT INTO [Tabellenname]([Spaltenname],[Spaltenname]) VALUES([Spaltenwert],[Spaltenwert])),([Spaltenwert],[Spaltenwert])),([Spaltenwert],[Spaltenwert]));

Zusammenfassen

Dies ist das Ende dieses Artikels über MySQL, das Massendaten aus einer Tabelle abfragt und in eine andere Tabelle einfügt. Weitere verwandte MySQL-Abfragen und das Einfügen von Massendaten in eine andere Tabelle 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:
  • Detaillierte Erläuterung der MySQL-Befehle und Anweisungen zum Einfügen und Abfragen von Daten
  • JDBC stellt eine Verbindung zu MySql-Datenbankschritten her und führt Abfragen, Einfügungen, Löschungen, Aktualisierungen usw. durch.
  • MySQL-Daten einfügen und Daten abfragen

<<:  Implementierung der Docker-Container-Verbindung und -Kommunikation

>>:  Detaillierte Erläuterung des Vue-Routing-Routers

Artikel empfehlen

Schritte zum Bereitstellen eines Spring Boot-Projekts mit Docker

Inhaltsverzeichnis Erstellen Sie ein einfaches Sp...

Zwei Methoden zum Wiederherstellen von MySQL-Daten

1. Einleitung Vor einiger Zeit gab es eine Reihe ...

Lösung für vergessenes Linux MySQL-Root-Passwort

Wenn Sie sich bei der Verwendung der MySQL-Datenb...

Vue integriert Tencent Map zur Implementierung der API (mit DEMO)

Inhaltsverzeichnis Hintergrund zum Schreiben Proj...

So erstellen Webdesigner Bilder für Retina-Displays

Besonderer Hinweis: Dieser Artikel wurde basieren...

Universelle Lösung für den Fehler beim Starten von MySQL unter Windows

MySQL-Startfehler Vor der Installation von MySQL ...

So zeigen Sie Dateien im Docker-Image an

So zeigen Sie Dateien in einem Docker-Image an 1....

JavaScript-Makrotasks und Mikrotasks

Makrotasks und Mikrotasks JavaScript ist eine Sin...

TortoiseSvn Little Turtle Installation Neuestes ausführliches Grafik-Tutorial

Bei der Installation von tortoiseGit gab es immer...