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

Implementierungsmethode und Beispielcode des Tomcat-Klassenladers

Tomcat definiert intern mehrere ClassLoader, soda...

MySQL-Onlineprobleme mit langsamem Log und Optimierungslösungen

Das MySQL-Slow-Log ist ein Informationstyp, auf d...

So lösen Sie das Problem verschwommener kleiner Symbole auf Mobilgeräten

Vorwort Zuvor habe ich über das Problem der verti...

So erstellen Sie einen MySQL-Cluster mit hoher Verfügbarkeit und Leistung

Inhaltsverzeichnis Was ist MySQL NDB Cluster? Vor...

Detailliertes Tutorial zur Installation des Quellcodes von CentOS6.9+Mysql5.7.18

Bei der Installation des Quellcodes von CentOS6.9...

JavaScript imitiert den Jingdong-Lupeneffekt

In diesem Artikel wird der spezifische Code für J...

Änderung der Standardquelldatei sources.list des Ubuntu20.04 LTS-Systems

Wenn Sie den Inhalt der Datei „source.list“ verse...

Verwendung und Verständnis von MySQL-Triggern

Inhaltsverzeichnis 1. Was ist ein Auslöser? 2. Er...