Lösungen für MySQL-Batch-Insert- und eindeutige Indexprobleme

Lösungen für MySQL-Batch-Insert- und eindeutige Indexprobleme

MySQL-Batch-Einfügeproblem

Da bei der Entwicklung eines Projekts einige grundlegende Daten des alten Systems im Voraus importiert werden mussten, habe ich während des Imports einen Batch-Importvorgang durchgeführt. Da die zulässige SQL-Anweisungsgröße in MySQL jedoch begrenzt ist, kann ich sie immer noch nicht einfügen, obwohl ich jedes Mal nur 500 stapeln kann. Zu diesem Zeitpunkt meldet der Code den folgenden Fehler:

Die verschachtelte Ausnahme ist com.mysql.jdbc.PacketTooBigException: Paket für Abfrage ist zu groß (5677854 > 1048576).

Sie können diesen Wert auf dem Server ändern, indem Sie die Variable „max_allowed_packet“ festlegen.

Anhand des Fehlerberichts können wir schnell erkennen, dass das Datenpaket der SQL-Anweisung zu groß ist. Um dieses Problem zu lösen, können wir den MySQL-Serverparameter max_allowed_packet festlegen.

Lösung

1. Fügen Sie den Parameter max_allowed_packet unter [mysqld] hinzu und stellen Sie ihn so groß wie möglich ein.

#Suchen Sie die Datei my.cnf#woist my.cnf
#vim meine.cnf
----------------------------
[mysqld]
max_Verbindungen = 3000
max_allowed_package=1024M

#Speichern und starten Sie den MySQL-Dienst neu, damit die Änderungen wirksam werden#service mysqld restart

2. Setzen Sie max_allowed_packet vorübergehend und setzen Sie es über die Anweisung

myslq>globales max_allowed_packet festlegen = 1024*1024*1024

Nach einem Neustart auf diese Weise wird max_allowed_packet ungültig

Standardmäßig beträgt der MySQL-Parameterwert max_allowed_packet 1M.

Der MySQL-Index unterscheidet nicht zwischen Groß- und Kleinschreibung

Beim Erstellen eines Index in einer MySQL-Datenbank wird standardmäßig die Groß- und Kleinschreibung nicht beachtet. Beispielsweise die folgende Anweisung:

CREATE TABLE `Standort` (
 `id` int(11) NICHT NULL AUTO_INCREMENT,
 `rc` varchar(2) STANDARD NULL KOMMENTAR 'R/C',
 `location_code` varchar(4) DEFAULT NULL COMMENT 'Standortcode',
 `location_name` varchar(30) DEFAULT NULL COMMENT 'Standortname',
 `zip_code` varchar(6) DEFAULT NULL COMMENT 'Postleitzahl',
 `Adresse` varchar(50) DEFAULT NULL KOMMENTAR 'Adresse',
 `link_man` varchar(15) DEFAULT NULL COMMENT 'Ansprechpartner',
 `link_phone` varchar(30) DEFAULT NULL COMMENT 'Kontakttelefonnummer',
 `fax` varchar(30) DEFAULT NULL KOMMENTAR 'Fax',
 `can_accept_car_time` varchar(40) DEFAULT NULL COMMENT 'Verfügbare Abholzeit für das Auto',
 `Typ` varchar(1) DEFAULT NULL COMMENT 'Kategorie',
 `maintenance_type` varchar(1) DEFAULT NULL COMMENT 'Wartungstyp',
 `Marke` varchar(4) DEFAULT NULL COMMENT 'Marke',
 `Reservierung` varchar(40) DEFAULT NULL COMMENT 'Reservierung',
 `aktivieren` int(1) DEFAULT '1',
 `msg_code` varchar(64) NOT NULL COMMENT 'Nachrichtencode',
 `receive_on` Zeitstempel NICHT NULL STANDARD CURRENT_TIMESTAMP KOMMENTAR 'Empfangsdatum',
 `create_on` Zeitstempel NICHT NULL STANDARD CURRENT_TIMESTAMP KOMMENTAR 'Erstellungsdatum',
 `modified_on` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Änderungsdatum',
 Primärschlüssel (`id`),
 EINZIGARTIGER SCHLÜSSEL `unique_msg_code` (`msg_code`) MIT BTREE,
 EINZIGARTIGER SCHLÜSSEL `unique_location_code` (`location_code`) MIT BTREE
) ENGINE=InnoDB AUTO_INCREMENT=16325 DEFAULT CHARSET=utf8 COMMENT='Adresstabelle';

Aber als ich die Adresscodes H12C bzw. h12C eingab, wurde ein Fehler gemeldet und eine Ausnahme ausgelöst: Doppelter Eintrag „H12C“ für Schlüssel „normal_localtion_code“, was bedeutet, dass die Groß-/Kleinschreibung nicht beachtet wird. Dieses Problem muss also gelöst werden.

Problemumgehung

1. Setzen Sie das Feld auf „Binär“, damit der Index zwischen Groß- und Kleinschreibung unterscheiden kann.

CREATE TABLE `Standort` (
 `id` int(11) NICHT NULL AUTO_INCREMENT,
 `rc` char(2) STANDARD NULL KOMMENTAR 'R/C',
 `location_code` varchar(4) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT 'Standortcode',
 `location_name` varchar(26) DEFAULT NULL COMMENT 'Standortname',
 `zip_code` varchar(6) DEFAULT NULL COMMENT 'Postleitzahl',
 `Adresse` varchar(50) DEFAULT NULL KOMMENTAR 'Adresse',
 `link_man` varchar(16) DEFAULT NULL COMMENT 'Ansprechpartner',
 `link_phone` varchar(30) DEFAULT NULL COMMENT 'Kontakttelefonnummer',
 `fax` varchar(30) DEFAULT NULL KOMMENTAR 'Fax',
 `can_accept_car_time` varchar(40) DEFAULT NULL COMMENT 'Verfügbare Abholzeit für das Auto',
 `Typ` varchar(1) DEFAULT NULL COMMENT 'Kategorie',
 `maintenance_type` varchar(1) DEFAULT NULL COMMENT 'Wartungstyp',
 `Marke` varchar(4) DEFAULT NULL COMMENT 'Marke',
 `Reservierung` varchar(40) DEFAULT NULL COMMENT 'Reservierung',
 `aktivieren` int(1) DEFAULT '1',
 `msg_code` varchar(64) NOT NULL COMMENT 'Nachrichtencode',
 `receive_on` Zeitstempel NICHT NULL STANDARD CURRENT_TIMESTAMP KOMMENTAR 'Empfangsdatum',
 `create_on` Zeitstempel NICHT NULL STANDARD CURRENT_TIMESTAMP KOMMENTAR 'Erstellungsdatum',
 `modified_on` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Änderungsdatum',
 Primärschlüssel (`id`),
 EINZIGARTIGER SCHLÜSSEL `unique_msg_code` (`msg_code`) MIT BTREE,
 EINZIGARTIGER SCHLÜSSEL `unique_location_code` (`location_code`) MIT BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4092 DEFAULT CHARSET=utf8 COMMENT='Standorttabelle';

//Ändern Sie die ursprünglichen Tabellenwörterbuchattribute:

ALTER TABLE `Standort`
SPALTE `location_code` `location_code` ÄNDERN VARCHAR(4) ZEICHENSATZ 'utf8' BINÄR NICHT NULL STANDARD '';

Die obige Methode löst das Problem.

Bei der Abfrage wird die Groß-/Kleinschreibung nicht beachtet.

Problemumgehung


1. Binärdatei zur Abfrageanweisung hinzufügen

2. Setzen Sie das Feldattribut im Einklang mit der Indexlösung auf „binär“.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Beispiele für 4 Methoden zum Einfügen großer Datenmengen in MySQL
  • MySQL-Batch-Einfügungsdaten-Implementierungscode
  • Tutorial zur Implementierung von Batch-Einfügungen in MySQL zur Leistungsoptimierung
  • So vermeiden Sie MySQL-Batch-Einfügungen mit eindeutigen Indizes
  • MySQL-Batch-Einfügen von Datenskript
  • Detaillierte Erläuterung der Leistungsoptimierung für MySQL-Batch-SQL-Einfügungen
  • So fügen Sie schnell 10 Millionen Datensätze in MySQL ein
  • Detaillierte Erläuterung mehrerer Beispiele für Insert- und Batch-Anweisungen in MySQL

<<:  Detaillierte Erläuterung der Implementierungsprinzipien von call, apply und bind in JavaScript

>>:  So implementieren Sie die domänenübergreifende API-Proxy-Weiterleitung über die Nginx-Proxy-Weiterleitungskonfiguration

Artikel empfehlen

Verwendung und Szenarioanalyse des npx-Befehls in Node.js

Tutorial zur Verwendung von NPX Heute Abend, als ...

Dockers flexible Implementierung zum Aufbau einer PHP-Umgebung

Verwenden Sie Docker, um eine flexible Online-PHP...

Zwei Möglichkeiten zur Implementierung von Square Div mit CSS

Ziel: Erstelle ein Quadrat, dessen Seitenlänge gl...

So implementieren Sie einen Animationsübergangseffekt im Frontend

Inhaltsverzeichnis Einführung Traditionelle Überg...

Detaillierte Erklärung des Lebenszyklus von Angular-Komponenten (Teil 2)

Inhaltsverzeichnis 1. Haken anzeigen 1. Was bei d...

5 Befehle zur Verwendung des Rechners in der Linux-Befehlszeile

Hallo zusammen, ich bin Liang Xu. Bei der Verwend...

Ausführliche Erläuterung der MySQL-Isolationsebene und des Sperrmechanismus

Inhaltsverzeichnis Kurzbeschreibung: 1. Vier Merk...

Das Vue-Projekt implementiert einen grafischen Überprüfungscode

In diesem Artikelbeispiel wird der spezifische Co...

So verwenden Sie den EXPLAIN-Befehl in SQL

Bei unserer täglichen Arbeit führen wir manchmal ...

Vue3+Skript-Setup+ts+Vite+Volar-Projekt

Inhaltsverzeichnis Erstellen Sie ein Vue + TS-Pro...

So schreiben Sie hochwertigen JavaScript-Code

Inhaltsverzeichnis 1. Einfach zu lesender Code 1....

So führen Sie py-Dateien direkt unter Linux aus

1. Erstellen Sie zuerst die Datei (wechseln Sie p...