So vermeiden Sie die Duplizierung von Daten beim Einfügen in einen MySql-Batch

So vermeiden Sie die Duplizierung von Daten beim Einfügen in einen MySql-Batch

Vorwort

Mysql fügt nicht duplizierte Daten ein. Wenn eine große Datenmenge eingefügt werden muss, muss ermittelt werden, ob die Einfügung wiederholt wird, und dann muss sie eingefügt werden. Wie kann also die Effizienz verbessert werden? Es gibt viele Möglichkeiten, das Problem zu lösen, und die Lösungen sind je nach Szenario unterschiedlich. Bei kleinen Datenmengen ist jede Lösung in Ordnung, bei großen Datenmengen ist das Problem jedoch nicht einfach.

1. füge ignore ein in

Die bereits in der Datenbank vorhandenen Daten werden ignoriert. Wenn keine Daten in der Datenbank vorhanden sind, werden neue Daten eingefügt. Wenn Daten vorhanden sind, werden die aktuell eingefügten Daten übersprungen. Auf diese Weise können die vorhandenen Daten in der Datenbank beibehalten und der Zweck des Einfügens von Daten in die Lücke erreicht werden.

Controller-Methode:

/**
 *Mitarbeiterdaten einfügen*/
@PostMapping("speichern")
@AntwortBody
öffentliche CommonResult<Mitarbeiter> speichern(@RequestBody Mitarbeiter Mitarbeiter) {
    returniere employeeService.saveEmp(Mitarbeiter);
}
EINFÜGEN IN
<!--Mitarbeiterdaten einfügen-->
<insert id="saveEmp" parameterType="com.dt.springbootdemo.entity.Employee">
    INSERT INTO t_employee(id, Name, Alter, Gehalt, Abteilungs-ID)
    WERTE (#{id},#{name},#{alter},#{gehalt},#{abteilungs-ID})
</einfügen> 

Bildbeschreibung hier einfügen

Wir fügen einen neuen Mitarbeiterdatensatz mit der Primärschlüssel-ID 1 hinzu.

Wenn ich die Anfrage erneut sende, wird ein Ausführungsfehler der SQL-Anweisung gemeldet, da der Primärschlüssel eindeutig ist und der Datensatz mit der ID=1 bereits vorhanden ist.

Bildbeschreibung hier einfügen

Ignorieren hinzufügen und einen weiteren Mitarbeiterdatensatz mit der ID=1 hinzufügen

IGNORE EINFÜGEN IN 

Bildbeschreibung hier einfügen

Es ist kein Fehler aufgetreten, aber die Hinzufügung war nicht erfolgreich und die Hinzufügung doppelter Daten wurde ignoriert.

2. bei doppeltem Schlüssel-Update

Bei Wiederholung des Primärschlüssels oder eindeutigen Schlüssels wird eine Aktualisierungsanweisung ausgeführt.

 BEIM UPDATE EINES DOPPELTEN SCHLÜSSELS id = id

Wir fügen dennoch den Mitarbeiterdatensatz mit der ID=1 ein und ändern die anderen Felder (Alter=25):

Bildbeschreibung hier einfügen

Datenbankeinträge anzeigen:

Bildbeschreibung hier einfügen

Sie können sehen, dass es keine Änderung gibt, nur ein Datenelement vorhanden ist und eine erfolgreiche Eingabeaufforderung zurückgegeben wird.

Diese Methode hat eine Voraussetzung, d. h. die einzufügende Einschränkung muss ein Primärschlüssel oder eine eindeutige Einschränkung sein (in Ihrem Unternehmen sollte das Feld, das als einziges Urteil verwendet werden muss, als eindeutige Einschränkung, d. h. als eindeutiger Schlüssel, festgelegt werden).

Erweiterung: Diese Methode erfüllt auch die Anforderungen anderer Geschäftsszenarien ->>> Aktualisieren Sie andere Felder regelmäßig.

Wir fügen der Mitarbeitertabelle ein Zeitfeld hinzu:

privates Datum, Aktualisierungszeit; 

Bildbeschreibung hier einfügen

Dann fügen wir Daten entsprechend dem Feld updateTime ein:

<insert id="saveEmp" parameterType="com.dt.springbootdemo.entity.Employee">
    INSERT INTO t_employee(id, Name, Alter, Gehalt, Abteilungs-ID, Aktualisierungszeit)
    WERTE (#{id},#{name},#{age},#{gehalt},#{abteilungs-ID},jetzt())
    BEIM UPDATE EINES DOPPELTEN SCHLÜSSELS update_time = now()
</einfügen>

Bildbeschreibung hier einfügen

Bildbeschreibung hier einfügen

Bildbeschreibung hier einfügen

Was muss ich tun, wenn ich beim Einfügen andere Felder (z. B. das Alter) aktualisieren muss?

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

Bildbeschreibung hier einfügen

3. ersetzen durch

Wenn Datensätze mit demselben Primär- oder Eindeutigkeitswert vorhanden sind, löschen Sie diese zuerst. Neue Datensätze erneut einfügen.

Ersetzen in
 <!--Mitarbeiterdaten einfügen-->
<insert id="saveEmp" parameterType="com.dt.springbootdemo.entity.Employee">
    REPLACE INTO t_employee(id, Name, Alter, Gehalt, Abteilungs-ID, Aktualisierungszeit)
    WERTE (#{id},#{name},#{age},#{gehalt},#{abteilungs-ID},jetzt())
</einfügen>

Bildbeschreibung hier einfügen

Bildbeschreibung hier einfügen

Zusammenfassung: In der tatsächlichen Entwicklung wird am häufigsten die zweite Methode verwendet, nämlich die Batch-Addition.

<!--Mitarbeiterdaten einfügen-->
<insert id="saveEmp" parameterType="java.util.List">
    INSERT INTO t_employee(id, Name, Alter, Gehalt, Abteilungs-ID, Aktualisierungszeit)
    WERTE
    <foreach Sammlung="Liste" Element="Element" Index="Index" Trennzeichen=",">
        (#{item.id},#{item.name},#{item.age},#{item.salary},#{item.departmentId},jetzt())
    </foreach>
    BEI DUPLIZIERTER SCHLÜSSELAKTUALISIERUNG id = id
</einfügen>

Regler:

@PostMapping("speichern")
@AntwortBody
öffentliche CommonResult<Mitarbeiter> speichern(@RequestBody List<Mitarbeiter> employeeList) {
    gibt employeeService.saveEmp(employeeList) zurück;
}

Bildbeschreibung hier einfügen

Wenn die gleiche ID bereits vorhanden ist, wird sie nicht mehrfach hinzugefügt.

Zusammenfassen

In der Praxis wird am häufigsten Methode 2 verwendet. Je nach Szenario kommen unterschiedliche Methoden zum Einsatz.

Dies ist das Ende dieses Artikels zum Einfügen von Daten ohne Duplikate während der MySql-Batch-Einfügung. Weitere relevante Inhalte zum Einfügen von MySql ohne Duplikate finden Sie in früheren Artikeln auf 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:
  • MySQL verwendet UNIQUE, um das Einfügen nicht doppelter Daten zu implementieren

<<:  Eine kurze Diskussion über das Design des Tomcat-Mehrschichtcontainers

>>:  Frage zu benutzerdefinierten Attributen von HTML-Tags

Artikel empfehlen

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.12

Notieren Sie die Installations- und Konfiguration...

Vergleich der Vorteile von vue3 und vue2

Inhaltsverzeichnis Vorteil 1: Optimierung des Dif...

MySQL-Datenbankoperationen (Erstellen, Auswählen, Löschen)

MySQL-Datenbank erstellen Nachdem wir uns beim My...

Reines CSS zum Hinzufügen von Stil zur ausgewählten Implementierung (kein Skript)

Ändern Sie den Standardstil der Auswahl, normalerw...

So überwachen Sie globale Variablen im WeChat-Applet

Ich bin kürzlich bei der Arbeit auf ein Problem g...

So lösen Sie das Problem „Nginx 503-Dienst vorübergehend nicht verfügbar“

In letzter Zeit tritt nach dem Aktualisieren der ...

Einfache Zusammenfassung der Methoden zur Leistungsoptimierung von Tomcat

Tomcat selbst optimieren Tomcat-Speicheroptimieru...

So installieren Sie MySQL auf CentOS und richten den Fernzugriff ein

1. Laden Sie die MySQL-Repo-Quelle herunter $ wge...

Detaillierte Erklärung der NodeJS-Modularität

Inhaltsverzeichnis 1. Einleitung 2. Haupttext 2.1...

Detaillierte Erklärung des Linux-Kernel-Makros Container_Of

Inhaltsverzeichnis 1. Wie werden Strukturen im Ge...

Einführung in das Versionsverwaltungstool Rational ClearCase

Rational ClearCase ist ein Tool für das Softwarek...

Das Vue-Projekt implementiert eine Fortschrittsbalkenfunktion für den Dateidownload

Im täglichen Geschäftsleben gibt es zwei gängige ...