Detaillierte Erklärung der MySQL-Alter-Ignore-Syntax

Detaillierte Erklärung der MySQL-Alter-Ignore-Syntax

Als ich heute bei der Arbeit war, wurde mir von der Geschäftsseite folgende Frage gestellt: Ich habe eine Tabelle und muss ein eindeutiges Feld hinzufügen, aber derzeit gibt es in diesem Feld einige doppelte Werte. Gibt es eine gute Lösung?

Als ich diese Frage zum ersten Mal hörte, wusste ich ehrlich gesagt nicht, wie ich das machen sollte, da ich noch nie auf eine solche Anforderung gestoßen war. Wenn Sie die Eindeutigkeit für ein wiederholtes Feld festlegen möchten, kommt es zwangsläufig zu Datenverlust, da ein Feld nicht eindeutig sein und wiederholte Werte haben kann. Also fragte ich ihn ausführlich nach seinen Anforderungen und erfuhr schließlich, dass bei diesem Vorgang nur ein doppeltes Datenelement gespeichert werden muss und ein gewisser Datenverlust toleriert werden kann. Das doppelte Feld ist zufällig das Zeitfeld. In diesem Fall muss nur sichergestellt werden, dass zu jedem Zeitpunkt ein Datensatz vorhanden ist.

Als ich das hörte, dachte ich über die folgenden Methoden nach:

1. Sichern Sie die Tabellendaten, filtern Sie dieses Feld mit der Distinct-Methode und verwenden Sie dann die Join-Abfrage, um andere Felder abzurufen.

2. Sichern Sie die Tabellendaten, zeichnen Sie anschließend mit der Abfragetabelle die Teile mit doppelten Werten auf, führen Sie Statistiken durch und behalten Sie anschließend einen der Datensätze nach dem Zufallsprinzip bei.

Zusätzlich zu diesen beiden Methoden gibt es in der niedrigeren Version von MySQL noch eine weitere Methode, nämlich die Methode „alter ignore table“. Diese Syntax wird selten verwendet. Ich habe ein Experiment durchgeführt, um sie zu testen:

[email protected]:yeyztest 23:30:51>>zeige Tabelle erstellen Test\G
*************************** 1. Reihe ***************************
    Tabelle: Test
Tabelle erstellen: CREATE TABLE `test` (
 `id` int(11) NICHT NULL AUTO_INCREMENT,
 `Alter` int(11) DEFAULT NULL,
 `score` int(11) NICHT NULL,
 PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8
1 Zeile im Satz (0,00 Sek.)

[email protected]:test 23:38:39>>Wählen Sie * aus Test;
+----+------+-------+
| ID | Alter | Punktzahl |
+----+------+-------+
| 1 | 2 | 3 |
| 2 | 2 | 3 |
| 3 | 3 | 4 |
| 4 | 4 | 5 |
+----+------+-------+
4 Zeilen im Satz (0,00 Sek.)

Erstellen Sie eine Tabelle, fügen Sie doppelte Datensätze ein und fügen Sie dann dem Altersfeld einen eindeutigen Index hinzu. Schauen wir uns die Ergebnisse an:

[email protected]:test 23:38:43>>Tabelle ändern, Test, eindeutigen Schlüssel hinzufügen, uni_key(Alter);
FEHLER 1062 (23000): Doppelter Eintrag „2“ für Schlüssel „uni_key“

[email protected]:test 23:39:04>>alter ignore table test add unique key uni_key(age);
FEHLER 1062 (23000): Doppelter Eintrag „2“ für Schlüssel „uni_key“


[email protected]:test 23:39:24>>wählen Sie @@old_alter_table=1;
+---------------------+
| @@old_alter_table=1 |
+---------------------+
| 0 |
+---------------------+
1 Zeile im Satz (0,00 Sek.)


mysql [email protected]:test 23:40:22>>set old_alter_table=1;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

[email protected]:test 23:40:36>>alter ignore table test add unique key uni_key(age);
Abfrage OK, 4 Zeilen betroffen (0,04 Sek.)
Datensätze: 4 Duplikate: 1 Warnungen: 0

[email protected]:test 23:40:39>>Wählen Sie * aus Test;
+----+------+-------+
| ID | Alter | Punktzahl |
+----+------+-------+
| 1 | 2 | 3 |
| 3 | 3 | 4 |
| 4 | 4 | 5 |
+----+------+-------+
3 Zeilen im Satz (0,00 Sek.)

Wie Sie sehen, haben wir zunächst die traditionelle Methode der direkten Modifikation verwendet. Das heißt, es wurde die Testmethode „Alter Table“ verwendet. Wenn widersprüchliche Datensätze gefunden wurden, sollten wir die Methode „Alter Ignore“ verwenden. Der Fehler blieb jedoch bestehen. Nach der Abfrage wurde festgestellt, dass ein Parameter fehlte: „old_alter_table“. Um doppelte Datensätze erfolgreich zu entfernen und einen eindeutigen Index hinzuzufügen, muss dieser Parameter auf 1 gesetzt werden. Schließlich wurde das Ergebnis erfolgreich erreicht.

Hierbei ist zu beachten, dass die Umgebung für diesen Test MySQL5.5.19 ist. In der MySQL5.7-Umgebung schlägt dieser Test fehl und diese Syntax wird als falsche Syntax markiert. Daher kann diese Methode nur in MySQL Version 5.5 verwendet werden. Interessierte Studierende können die Einsatzfähigkeit auf der Version 5.6 testen.

Lassen Sie mich noch einen Punkt erklären. Das Wesentliche von „Alter Ignore Table“ besteht darin, eine neue Tabelle zu erstellen. Dann ist das Altersfeld in der neuen Tabellenstruktur eindeutig. Fügen Sie es dann über die Insert-Ignore-Syntax ein. Wenn doppelte Datensätze gefunden werden, werden diese direkt gelöscht. Achten Sie daher bei Verwendung dieser Syntax auf die Datenmenge in Ihrer Tabelle. Bei großen Datenmengen müssen Sie vorsichtig sein, da die Ausführungszeit sehr lang sein kann.

Das ist alles für heute.

Oben finden Sie eine ausführliche Erklärung der MySQL-Alter-Ignore-Syntax. Weitere Informationen zur MySQL-Alter-Ignore-Syntax finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Erläuterung der grundlegenden Syntax gespeicherter Prozeduren in der MySQL-Datenbank
  • Detaillierte Analyse der Syntax von Mysql-Updates zum Ändern mehrerer Felder und
  • Detaillierte Erklärung des mysqlslap-Befehls und der Syntax für den integrierten Stresstest in MySQL 5.7
  • Detaillierte Erklärung der MySQL-Syntax, Sonderzeichen und regulären Ausdrücke
  • Detaillierte Erläuterung des MySQL 5.7.9-Shutdown-Syntaxbeispiels
  • Grundlegende Syntax und Funktionsweise der MySQL-Datenbank

<<:  Eine elegantere Methode zur Fehlerbehandlung in JavaScript async await

>>:  So verbinden Sie die Idee mit Docker, um eine Bereitstellung mit einem Klick zu erreichen

Artikel    

Artikel empfehlen

Detaillierte Erklärung zur Verwendung mehrerer Timer in CocosCreator

1. setTimeOut Drucken Sie abc nach 3 Sekunden. Nu...

JavaScript zur Implementierung der Login-Schiebereglerüberprüfung

In diesem Artikelbeispiel wird der spezifische Ja...

So lassen Sie DOSBox nach dem Start automatisch Befehle ausführen

Mit DOSBox können Sie DOS unter Windows simuliere...

Änderung des Zeitzonenproblems von MySQL-Containern in Docker

Vorwort Als Ahhang das Springboot-Projekt entwick...

Grundlegendes Verständnis und Verwendung der HTML-Auswahloption

Detaillierte Erklärung von HTML (Option auswählen)...

Tiefgreifendes Verständnis des asynchronen Wartens in Javascript

In diesem Artikel untersuchen wir, warum async/aw...

Zusammenfassung der Linux Logical Volume Management (LVM)-Nutzung

Die Verwaltung des Speicherplatzes ist für System...

Einführung und detaillierte Verwendung von React Fragment

Inhaltsverzeichnis Vorwort Motivation für Fragmen...

Linux-Unlink-Funktion und wie man Dateien löscht

1. Unlink-Funktion Bei Hardlinks wird mit „unlink...

Gruselige Halloween-Linux-Befehle

Auch wenn nicht Halloween ist, lohnt es sich, sic...