SQLite Fehlerbehandlung

SQLiteSQLiteBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie Fehler in SQLite-Datenbanken effektiv behandeln. Der Schwerpunkt liegt auf der Behandlung von Constraint-Verletzungen (Einschränkungsverletzungen) während INSERT-Operationen mithilfe der ON CONFLICT-Klausel.

Sie beginnen mit der Erstellung einer Datenbank und einer Tabelle mit einer UNIQUE-Constraint (UNIQUE-Einschränkung). Anschließend untersuchen Sie verschiedene Aktionen, die bei einem Konflikt ausgeführt werden können, wie z. B. ROLLBACK, ABORT, FAIL, IGNORE oder REPLACE, insbesondere die Verwendung von ON CONFLICT IGNORE, um das Einfügen zu verhindern, wenn eine Unique-Constraint (Unique-Einschränkung) verletzt wird. Das Lab führt Sie durch praktische Beispiele zum Einfügen von Daten und zur Behandlung potenzieller Fehler.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sqlite(("SQLite")) -.-> sqlite/SQLiteGroup(["SQLite"]) sqlite/SQLiteGroup -.-> sqlite/init_db("Create SQLite Database") sqlite/SQLiteGroup -.-> sqlite/make_table("Create New Table") sqlite/SQLiteGroup -.-> sqlite/add_row("Insert Single Row") sqlite/SQLiteGroup -.-> sqlite/add_rows("Insert Multiple Rows") sqlite/SQLiteGroup -.-> sqlite/start_trans("Begin New Transaction") sqlite/SQLiteGroup -.-> sqlite/undo_trans("Rollback Transaction") subgraph Lab Skills sqlite/init_db -.-> lab-552550{{"SQLite Fehlerbehandlung"}} sqlite/make_table -.-> lab-552550{{"SQLite Fehlerbehandlung"}} sqlite/add_row -.-> lab-552550{{"SQLite Fehlerbehandlung"}} sqlite/add_rows -.-> lab-552550{{"SQLite Fehlerbehandlung"}} sqlite/start_trans -.-> lab-552550{{"SQLite Fehlerbehandlung"}} sqlite/undo_trans -.-> lab-552550{{"SQLite Fehlerbehandlung"}} end

Erstellen einer SQLite-Datenbank und Tabelle mit einer UNIQUE-Constraint (UNIQUE-Einschränkung)

In diesem Schritt erstellen Sie eine SQLite-Datenbank und eine Tabelle mit einer UNIQUE-Constraint (UNIQUE-Einschränkung). Diese Constraint (Einschränkung) hilft Ihnen zu verstehen, wie Sie Fehler beim Einfügen doppelter Daten behandeln können.

Öffnen Sie zunächst Ihr Terminal in der LabEx VM. Ihr Standardpfad ist /home/labex/project.

Erstellen wir nun eine SQLite-Datenbank namens my_database.db. Führen Sie den folgenden Befehl aus, um die Datenbankdatei zu erstellen und das SQLite-Befehlszeilentool zu öffnen:

sqlite3 my_database.db

Sie sehen eine Eingabeaufforderung, die anzeigt, dass Sie sich jetzt in der SQLite-Shell befinden:

SQLite version 3.x.x
Enter ".help" for usage hints.
sqlite>

Erstellen Sie als Nächstes eine Tabelle namens users, um Benutzerinformationen zu speichern. Diese Tabelle hat drei Spalten: id, username und email. Die Spalte username hat eine UNIQUE-Constraint (UNIQUE-Einschränkung), was bedeutet, dass jeder Benutzername innerhalb der Tabelle eindeutig sein muss. Geben Sie den folgenden SQL-Befehl an der sqlite>-Eingabeaufforderung ein und drücken Sie die Eingabetaste:

CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT UNIQUE NOT NULL,
    email TEXT NOT NULL
);

Dieser Befehl richtet die Tabelle users ein, in der:

  • id eine Ganzzahl ist, die für jeden neuen Eintrag automatisch erhöht wird. Die PRIMARY KEY-Constraint (PRIMARY KEY-Einschränkung) stellt sicher, dass jede id eindeutig ist, und AUTOINCREMENT sorgt für die automatische Erhöhung.
  • username ein Textfeld ist, das nicht leer gelassen werden darf (NOT NULL) und eindeutig sein muss (UNIQUE).
  • email ist ebenfalls ein Textfeld, das nicht leer gelassen werden darf (NOT NULL).

Sie sehen keine Ausgabe, wenn der Befehl erfolgreich ausgeführt wird.

Daten in die Tabelle einfügen

Nachdem Sie die Tabelle users erstellt haben, fügen wir einige Daten hinzu. Wir fügen einen Benutzerdatensatz in die Tabelle ein.

Fügen Sie einen Benutzerdatensatz in die Tabelle users ein, indem Sie diesen Befehl an der sqlite>-Eingabeaufforderung ausführen:

INSERT INTO users (username, email) VALUES ('Alice', '[email protected]');

Dieser Befehl fügt eine Zeile zur Tabelle users hinzu.

  • INSERT INTO users (username, email) gibt an, dass Sie Daten in die Spalten username und email der Tabelle users einfügen.
  • VALUES ('Alice', '[email protected]') stellt die Werte bereit, die für jeden Datensatz eingefügt werden sollen.

Um zu bestätigen, dass die Daten korrekt hinzugefügt wurden, führen Sie diesen Befehl aus, um alle Datensätze in der Tabelle anzuzeigen:

SELECT * FROM users;

Erwartete Ausgabe:

1|Alice|[email protected]

Diese Ausgabe zeigt die id, den username und die email für den Datensatz. Der Befehl SELECT * ruft alle Spalten aus der angegebenen Tabelle ab.

Versuch, doppelte Daten einzufügen

In diesem Schritt versuchen Sie, einen Datensatz mit einem doppelten Benutzernamen einzufügen. Dies verstößt gegen die UNIQUE-Constraint (UNIQUE-Einschränkung) und verursacht einen Fehler.

Führen Sie den folgenden Befehl an der sqlite>-Eingabeaufforderung aus:

INSERT INTO users (username, email) VALUES ('Alice', '[email protected]');

Sie sehen eine Fehlermeldung, die dieser ähnelt:

Error: UNIQUE constraint failed: users.username

Diese Fehlermeldung weist darauf hin, dass die UNIQUE-Constraint (UNIQUE-Einschränkung) für die Spalte username verletzt wurde. SQLite verhindert das Einfügen doppelter Benutzernamen, um die Datenintegrität zu gewährleisten.

Verwenden von ON CONFLICT IGNORE zur Behandlung von Constraint-Verletzungen

In diesem Schritt lernen Sie, wie Sie die ON CONFLICT IGNORE-Klausel verwenden, um Constraint-Verletzungen (Einschränkungsverletzungen) zu behandeln. Diese Klausel weist SQLite an, die Einfügung zu ignorieren, wenn sie eine Constraint (Einschränkung) verletzen würde.

Führen Sie den folgenden Befehl an der sqlite>-Eingabeaufforderung aus:

INSERT OR IGNORE INTO users (username, email) VALUES ('Alice', '[email protected]');

Dieser Befehl versucht, einen neuen Datensatz mit dem Benutzernamen 'Alice' einzufügen. Da jedoch die ON CONFLICT IGNORE-Klausel verwendet wird, ignoriert SQLite die Einfügung und es wird kein Fehler ausgelöst.

Um zu bestätigen, dass der doppelte Datensatz nicht eingefügt wurde, führen Sie diesen Befehl aus:

SELECT * FROM users;

Erwartete Ausgabe:

1|Alice|[email protected]

Die Ausgabe zeigt, dass nur der ursprüngliche Datensatz mit dem Benutzernamen 'Alice' in der Tabelle vorhanden ist. Der doppelte Datensatz wurde ignoriert.

Die INSERT OR IGNORE-Anweisung bietet eine Möglichkeit, Fehler zu vermeiden und die Datenintegrität zu wahren, wenn Daten eingefügt werden, die möglicherweise Constraints (Einschränkungen) verletzen.

Verwenden von ON CONFLICT REPLACE zur Behandlung von Constraint-Verletzungen

In diesem Schritt lernen Sie, wie Sie die ON CONFLICT REPLACE-Klausel verwenden, um Constraint-Verletzungen (Einschränkungsverletzungen) zu behandeln. Diese Klausel weist SQLite an, den vorhandenen Datensatz durch den neuen Datensatz zu ersetzen, wenn dieser eine Constraint (Einschränkung) verletzen würde.

Führen Sie den folgenden Befehl an der sqlite>-Eingabeaufforderung aus:

INSERT OR REPLACE INTO users (id, username, email) VALUES (1, 'Alice', '[email protected]');

Dieser Befehl versucht, einen neuen Datensatz mit dem Benutzernamen 'Alice' einzufügen. Da die ON CONFLICT REPLACE-Klausel verwendet wird, ersetzt SQLite den vorhandenen Datensatz durch den neuen Datensatz. Beachten Sie, dass wir in diesem Fall die id angeben müssen, da REPLACE die alte Zeile löscht und eine neue einfügt.

Um zu bestätigen, dass der Datensatz ersetzt wurde, führen Sie diesen Befehl aus:

SELECT * FROM users;

Erwartete Ausgabe:

1|Alice|[email protected]

Die Ausgabe zeigt, dass die E-Mail-Adresse für den Datensatz mit dem Benutzernamen 'Alice' auf [email protected] aktualisiert wurde.

Die INSERT OR REPLACE-Anweisung bietet eine Möglichkeit, vorhandene Datensätze zu aktualisieren und gleichzeitig die Datenintegrität zu wahren.

Beenden Sie abschließend die SQLite-Shell:

.exit

Dadurch wird die Datenbankverbindung geschlossen und Sie kehren zum Terminal zurück.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie Fehler in SQLite-Datenbanken effektiv behandeln, wobei der Schwerpunkt auf Constraint-Verletzungen (Einschränkungsverletzungen) während INSERT-Operationen liegt. Sie haben eine Datenbank und eine Tabelle mit einer UNIQUE-Constraint (UNIQUE-Einschränkung) erstellt, Daten eingefügt und dann versucht, doppelte Daten einzufügen, um einen Fehler auszulösen. Anschließend haben Sie untersucht, wie Sie die Klauseln ON CONFLICT IGNORE und ON CONFLICT REPLACE verwenden können, um diese Constraint-Verletzungen (Einschränkungsverletzungen) zu behandeln, sodass Sie steuern können, wie SQLite auf potenzielle Fehler reagiert und die Datenintegrität aufrechterhält.