MariaDB - Duplikate verwalten
Wie in früheren Lektionen erläutert, ermöglicht MariaDB in einigen Situationen doppelte Datensätze und Tabellen. Einige dieser Duplikate sind aufgrund unterschiedlicher Daten oder Objekttypen oder aufgrund einer eindeutigen Lebensdauer oder Speicherung des Operationsobjekts keine Duplikate. Diese Duplikate stellen typischerweise auch keine Probleme dar.
In einigen Situationen verursachen Duplikate Probleme und treten häufig aufgrund impliziter Aktionen oder der milderen Richtlinie eines MariaDB-Befehls auf. Es gibt Möglichkeiten, dieses Problem zu kontrollieren, Duplikate zu finden, Duplikate zu löschen und die Erstellung von Duplikaten zu verhindern.
Strategien und Tools
Es gibt vier wichtige Möglichkeiten, um Duplikate zu verwalten:
Fischen Sie mit JOIN nach ihnen und löschen Sie sie mit einer temporären Tabelle.
Verwenden Sie INSERT ... ON DUPLICATE KEY UPDATE, um bei Entdeckung eines Duplikats zu aktualisieren.
Verwenden Sie DISTINCT, um die Ergebnisse einer SELECT-Anweisung zu bereinigen und Duplikate zu entfernen.
Verwenden Sie INSERT IGNORE, um das Einfügen von Duplikaten zu stoppen.
Verwenden von Join mit einer temporären Tabelle
Führen Sie einfach einen Semi-Join wie einen inneren Join durch und entfernen Sie dann die mit einer temporären Tabelle gefundenen Duplikate.
INSERT verwenden
Wenn INSERT ... ON DUPLICATE KEY UPDATE einen doppelten eindeutigen oder Primärschlüssel entdeckt, führt es eine Aktualisierung durch. Bei der Erkennung mehrerer eindeutiger Schlüssel wird nur der erste aktualisiert. Verwenden Sie es daher nicht für Tabellen mit mehreren eindeutigen Indizes.
Sehen Sie sich das folgende Beispiel an, das zeigt, was in einer Tabelle mit indizierten Werten beim Einfügen in ein ausgefülltes Feld passiert:
INSERT INTO add_dupl VALUES (1,'Apple');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
Note - Wenn kein Schlüssel gefunden wird, wird eine Anweisung INSERT ... ON DUPLICATE KEY UPDATE wie eine normale Anweisung insert ausgeführt.
Verwenden von DISTINCT
DISTINCT-Klauseln entfernen Duplikate aus den Ergebnissen. Die allgemeine Syntax für eine DISTINCT-Klausel lautet wie folgt:
SELECT DISTINCT fields
FROM table
[WHERE conditions];
Note - Die Ergebnisse einer Anweisung mit einer DISTINCT-Klausel -
Bei Verwendung eines Ausdrucks werden eindeutige Werte zurückgegeben.
Bei Verwendung mehrerer Ausdrücke werden eindeutige Kombinationen zurückgegeben.
NULL-Werte werden nicht ignoriert. Daher enthalten die Ergebnisse auch NULL-Werte als eindeutige Werte.
Überprüfen Sie die folgende Anweisung mit einer DISTINCT-Klausel für einen einzelnen Ausdruck:
SELECT DISTINCT product_id
FROM products
WHERE product_name = 'DustBlaster 5000';
Überprüfen Sie das folgende Beispiel mit mehreren Ausdrücken:
SELECT DISTINCT product_name, product_id
FROM products
WHERE product_id < 30
Verwenden von INSERT IGNORE
Eine INSERT IGNORE-Anweisung weist MariaDB an, das Einfügen abzubrechen, wenn ein doppelter Datensatz entdeckt wird. Sehen Sie sich ein Beispiel für seine Verwendung an -
mysql> INSERT IGNORE INTO customer_tbl (LN, FN)
VALUES( 'Lex', 'Luther');
Beachten Sie auch die Logik hinter Duplikaten. Einige Tabellen erfordern Duplikate, die auf der Art dieser Tabellendaten basieren. Berücksichtigen Sie diese Anforderungen in Ihrer Strategie zur Verwaltung doppelter Datensätze.