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 empfehlen

Die Verbindung zwischen JavaScript und TypeScript

Inhaltsverzeichnis 1. Was ist JavaScript? 2. Wofü...

Eine kurze Diskussion über die Eigenschaften von CSS-Float

In diesem Artikel werden die Eigenschaften von CS...

Lösung für die Navicat Premier-Remoteverbindung zum MySQL-Fehler 10038

Schlägt die Remote-Verbindung zu MySQL fehl, kann...

Beispiel für eine adaptive CSS-Bildschirmgrößenimplementierung

Um eine CSS-Bildschirmgrößenanpassung zu erreiche...

Vue3 (Teil 2) Integration von Ant Design Vue

Inhaltsverzeichnis 1. Integrieren Sie Ant Design ...

Installieren Sie Docker unter CentOS 7

Wenn Sie kein Linux-System haben, finden Sie unte...

Tutorial zur Installation von MYSQL8.0 auf Alibaba Cloud ESC

Öffnen Sie das Verbindungstool. Ich verwende Moba...

Gestaltung der Bildvorschau auf der Inhaltswebseite

<br />Ich habe bereits zwei Artikel geschrie...

Detaillierte Analyse des MySQL Master-Slave-Verzögerungsphänomens und -prinzips

1. Phänomen Am frühen Morgen wurde einer Online-T...

Beispiel zum Erstellen und Ausführen mehrerer MySQL-Container in Docker

1. Verwenden Sie das Image mysql/mysql-server:lat...

Vue implementiert die Drag & Drop-Funktion für Bilder

In diesem Artikelbeispiel wird der spezifische Co...