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

So verwenden Sie Vue3-Mixin

Inhaltsverzeichnis 1. Wie verwende ich Mixin? 2. ...

Sollte ich beim Erstellen einer Website die Kodierung UTF-8 oder GB2312 verwenden?

Beim Öffnen ausländischer Websites werden häufig ...

Detaillierte Erklärung zur JavaScript-Datenabflachung

Inhaltsverzeichnis Was ist Abflachung? Rekursion ...

Lernen Sie, wie Sie in 6 Sekunden 1 Million Datensätze in MySQL einfügen

1. Idee Es dauerte nur 6 Sekunden, um 1.000.000 D...

Lehr- oder Lernprogramm für Webdesign

Abschnitt Studieninhalte Std 1 Webdesign-Übersich...

Detaillierte Erklärung der Rolle von Explain in MySQL

1. MySQL-Index Index: Eine Datenstruktur, die MyS...

Eine kurze Diskussion über benutzerdefinierte VUE-Uni-App-Komponenten

1. Übergeordnete Komponenten können Daten über Re...