Duplizierung in SQLite verhindern

Bilal Shahid 21 Juni 2023
Duplizierung in SQLite verhindern

Beim Befüllen einer Datenbank ist eines der häufigsten Probleme, auf das man stoßen kann, die Datenduplizierung. Dies kann für viele Benutzer problematisch sein, insbesondere für Benutzer mit großen Datenbanken.

Es könnte eine Reihe von Problemen geben, einschließlich Speicherverschwendung, die ziemlich kostspielig sein kann.

Unabhängig davon ist es notwendig, es während des Einführens idealerweise zu vermeiden. Dadurch wird verhindert, dass überhaupt Zugangsdaten in die Datenbank gelangen.

So vermeiden Sie doppelte Einträge in SQLite

In SQLite gibt es mehrere Möglichkeiten, doppelte Einträge zu vermeiden. Die Hauptgründe, die jede dieser Methoden unterscheiden, sind:

  1. Die einfache Anwendung.
  2. Die Wirksamkeitsrate.
  3. Die Anforderungen Ihrer Datenbank.

Manuelle Entfernung

Vor fortgeschrittenen Datenbankabfragen war es üblich, die Einträge durchzugehen und jede Duplizierung zu identifizieren. Dies kann immer noch für Datenbanken mit sehr wenigen Datensätzen funktionieren.

Dies ist jedoch in allen Fällen ineffizient und für viel größere Datenbanken unbrauchbar. Diese Probleme sind der Grund, warum diese Methode kaum verwendet wird.

Verwenden Sie erweiterte verschachtelte Abfragen

Erweiterte verschachtelte Abfragen können alles tun, wenn sie richtig angewendet werden. Aber auch das wird oft nicht gewürdigt.

Ihre Gestaltung ist oft komplex und möglicherweise nicht in allen Fällen genau. Obwohl diese Methode funktioniert, wird sie daher nicht empfohlen, da es einfachere Methoden gibt.

die Einschränkung EINZIGARTIG

Diese Einschränkung wird in SQLite häufig während der Tabellenerstellung angewendet. Wenn es auf eine Zeile angewendet wird, verhindert es, dass Benutzer doppelte Einträge in einer Datenbank in derselben Zeile eingeben.

Diese Einschränkung wird auch automatisch angewendet, wenn eine Primärschlüssel-Einschränkung verwendet wird. Sie können eine Tabelle erstellen und die eindeutige Einschränkung mit dem folgenden Code anwenden.

CREATE TABLE users(
    users_id INTEGER,
    user_age INTEGER,
    UNIQUE(users_id, lessoninfo_id)
);

Sie können es auch direkt wie folgt anwenden:

CREATE TABLE users(
   users_id INTEGER UNIQUE,
    user_age INTEGER
);

Wenn Sie Ihre Tabelle bereits erstellt haben und eine Änderung hinzufügen müssen, um eine einzelne Zeile eindeutig zu machen, müssen Sie die gesamte Tabelle löschen. Sie können sich auch für einen eindeutigen Index entscheiden, wie im folgenden Code gezeigt.

CREATE UNIQUE INDEX index_name
ON users(users_id);

die EXISTS-Klausel

Exists wird oft in Abfragen und verschachtelten Abfragen verwendet. Es ist einfach, komplexe Abfragen auf viel einfachere zu reduzieren.

Die Umkehrung ist die NOT EXISTS-Klausel, die das genaue Gegenteil bedeutet. Dies kann in Abfragen nach dem Einfügen verwendet werden, wie unten gezeigt.

Stellen Sie zunächst sicher, dass Ihre Tabelle bereits erstellt wurde. Sie können dazu den folgenden Code verwenden.

CREATE TABLE users(
   users_id INTEGER,
    user_age INTEGER
);

Beginnen Sie danach mit der Erstellung Ihrer Abfrage. Sie können sich auf den folgenden Code beziehen, um die Klausel korrekt zu verwenden.

SELECT *
FROM users
WHERE EXISTS
(
--any query with your preferred conditions
)

Hinweis: Wenn hier EXISTS durch NOT EXISTS ersetzt wird, erhalten Sie das gegenteilige Ergebnis.

Wie unten erläutert, können Sie diese Logik auch direkt beim Einfügen anwenden, indem Sie die Klausel anders verwenden.

Einfügen wenn NICHT VORHANDEN

Beim Erstellen einer Abfrage, die Werte in Ihre Tabelle in einer Datenbank einfügt, ist die beste und wahrscheinlich am häufigsten verwendete Methode die Verwendung von Einfügen, wenn nicht vorhanden.

Dies kann als bessere Möglichkeit angesehen werden, die Klausel nicht vorhanden zu verwenden, indem Sie sie mit der Abfrage kombinieren, in die Sie Daten einfügen. Ein Beispiel dafür ist im folgenden Code dargestellt.

Erstellen Sie zuerst Ihre Tabelle.

CREATE TABLE users(
   users_id INTEGER,
    user_age INTEGER
);

Entwerfen Sie dann eine Abfrage wie die im folgenden Code.

INSERT INTO users(users_id,user_age)
SELECT * /*user whose id isn't 1.*/
WHERE NOT EXISTS
(
SELECT 1 FROM memos WHERE id = 5 AND name= 'abc'
);

Wie die Bezeichnung schon sagt, zeigt diese Abfrage nur die Benutzer oder Dateneinträge an, bei denen die Benutzer-ID nicht 1 ist. Sie können die Bedingung jederzeit ändern, indem Sie die Abfrage in den Klammern Ihren Anforderungen entsprechend ändern.

EINFÜGEN ODER IGNORIEREN

Eine weitere Methode, die Sie erfolgreich daran hindern würde, Redundanzen in SQLite hinzuzufügen, ist die Klausel Einfügen oder Ignorieren. Wenn die Einfügung gegen vordefinierte Bedingungen verstößt, wird die Einfügung ignoriert.

Ihre Abfrage wird erfolgreich ausgeführt, aber es wird keine Einfügung vorgenommen.

Nehmen wir ein weiteres Beispiel, bei dem ein Primärschlüssel existiert. Bei einem Primärschlüssel existiert die Eindeutigkeitsbeschränkung, was bedeutet, dass doppelte Eingaben nicht akzeptiert werden.

Zunächst wird eine Tabelle mit einem Primärschlüssel wie folgt erstellt:

CREATE TABLE users
(
id INTEGER NOT NULL PRIMARY KEY,
age INTEGER
);

Wir können einen Wert mit der Bedingung Ignorieren einfügen, wie unten gezeigt.

INSERT OR IGNORE
INTO users(id, age) VALUES(123, 24)

Würden wir davon ausgehen, dass bereits ein Benutzer mit der ID 123 existiert, würde diese Einfügung nicht stattfinden und es würden keine Änderungen an der ursprünglichen Tabelle vorgenommen.

Hinweis: Wenn Sie keine Eindeutigkeitsbeschränkung für die Spalte haben, in die Sie die Werte einfügen, wird der Datensatz immer eingefügt.

die REPLACE-Klausel

Anstatt die Klausel Ignorieren zu verwenden, können Sie sich auch dafür entscheiden, sie zu ersetzen. Dies ähnelt der Klausel Ignorieren, da sie zuerst prüft, ob die eingefügten Werte eindeutig sind, wenn die Eindeutigkeitsbeschränkung (oder der Primärschlüssel) auf eine bestimmte Zeile angewendet wurde.

Der Unterschied hier besteht darin, dass, wenn der Datensatz mit der Eindeutigkeitsbeschränkung bereits vorhanden ist, er durch den neuen Datensatz ersetzt wird, den Sie einfügen.

INSERT OR REPLACE
INTO users(id, age) VALUES(123, abc)

Wenn hier bereits ein Benutzer mit der ID 123 in der Tabelle vorhanden ist, wird der Name durch abc ersetzt.

Das ist alles, was Sie wissen müssen, um doppelte Einträge in SQLite zu vermeiden. Wir hoffen, dass Sie jetzt genau wissen, was zu tun ist, um Ihre Anforderungen zu erfüllen und die effizienteste Datenbank zu erstellen.

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

Verwandter Artikel - SQLite Insert