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:
|
<<: Eine elegantere Methode zur Fehlerbehandlung in JavaScript async await
>>: So verbinden Sie die Idee mit Docker, um eine Bereitstellung mit einem Klick zu erreichen
Inhaltsverzeichnis 1. Was ist JavaScript? 2. Wofü...
In diesem Artikel werden die Eigenschaften von CS...
Schlägt die Remote-Verbindung zu MySQL fehl, kann...
Um eine CSS-Bildschirmgrößenanpassung zu erreiche...
Inhaltsverzeichnis 1. Integrieren Sie Ant Design ...
Heute hatte ich etwas Freizeit, um eine Website f...
Wenn Sie kein Linux-System haben, finden Sie unte...
Öffnen Sie das Verbindungstool. Ich verwende Moba...
<br />Ich habe bereits zwei Artikel geschrie...
Inhaltsverzeichnis Vorwort 1. Props, $emit Einweg...
1. Einleitung Die bisherige Programmarchitektur k...
1. Phänomen Am frühen Morgen wurde einer Online-T...
Als ich heute Abend nach dem Abendessen meinen La...
1. Verwenden Sie das Image mysql/mysql-server:lat...
In diesem Artikelbeispiel wird der spezifische Co...