SQLite INSERT, UPDATE, DELETE Abfrage mit Beispiel

Inhaltsverzeichnis:

Anonim

Die Datenänderungsklauseln in SQLite sind INSERT-, UPDATE- und DELETE-Anweisungen. Es wird zum Einfügen neuer Zeilen, Aktualisieren vorhandener Werte oder Löschen von Zeilen aus der Datenbank verwendet.

In diesem Tutorial lernen Sie:

  • EINFÜGEN
  • Aktualisieren
  • Löschen
  • Konfliktklausel

Beachten Sie, dass Sie für alle folgenden Beispiele die Datei sqlite3.exe ausführen und eine Verbindung zur Beispieldatenbank als fließend öffnen müssen:

Schritt 1) In diesem Schritt

  1. Öffnen Sie den Arbeitsplatz und navigieren Sie zum folgenden Verzeichnis " C: \ sqlite " und
  2. Dann öffnen Sie " sqlite3.exe ":

Schritt 2) Öffnen Sie die Datenbank " TutorialsSampleDB.db " mit dem folgenden Befehl:

.open TutorialsSampleDB.db

Jetzt können Sie jede Art von Abfrage in der Datenbank ausführen.

SQLite INSERT

SQLite INSERT wird verwendet, um Datensätze in eine angegebene Tabelle der Datenbank einzufügen. Sie müssen die 'INSERT'-Klausel verwenden. Die Syntax der INSERT-Klausel lautet wie folgt:

  • Nach der INSERT-Klausel sollten Sie angeben, in welche Tabelle Sie die Werte einfügen müssen.
  • Nach dem Tabellennamen schreiben Sie die Liste der Spalten, in die Sie die Werte einfügen möchten.
  • Sie können den Spaltennamen ignorieren und nicht darauf schreiben.
  • Wenn Sie den Spaltennamen nicht schreiben, werden die Werte in derselben Reihenfolge in alle in der Tabelle gefundenen Spalten eingefügt. Die Spalten werden in der Tabelle definiert.
  • Nach der VALUES-Klausel sollten Sie die einzufügenden Werte auflisten.
  • Jede INSERT-Klausel fügt nur eine Zeile ein. Wenn Sie mehrere Zeilen einfügen möchten, sollten Sie mehrere INSERT-Klauseln schreiben, eine für jede Zeile.

SQLite Insert-Beispiel

Im folgenden Beispiel fügen wir zwei Zeilen in die Schülertabelle ein, eine für jeden Schüler:

INSERT INTO Students (StudentId, StudentName, DepartmentId, DateOfBirth)VALUES (11, 'Ahmad', 4, '1997-10-12');IN Studentenwerte einfügen (12, 'Aly', 4, '1996-10-12');

Dies sollte erfolgreich ausgeführt werden und es gibt keine Ausgabe dafür:

Dadurch werden zwei Schüler eingefügt:

  • Der erste Schüler mit StudentId = 11, StudentName = Ahmad, DepartmentId = 4 und DateOfBirth = 1997-10-12.
  • Der zweite Schüler mit StudentId = 12, StudentName = Aly, DepartmentId = 4 und DateOfBirth = 1996-10-12 '.

In der ersten Anweisung haben wir die Spaltennamen " StudentId, StudentName, DepartmentId, DateOfBirth " aufgelistet. In der zweiten Anweisung haben wir dies jedoch nicht getan.

Die vier Werte " 12, 'Aly', 4, '1996-10-12' " werden in der gleichen Reihenfolge, in der die Spalten definiert sind, in alle vier Spalten der Schülertabelle eingefügt.

Überprüfen Sie nun, ob die beiden Schüler in die Schülertabelle eingefügt wurden, indem Sie die folgende Abfrage ausführen:

SELECT * FROM Students;

Dann sollten Sie die beiden von dieser Abfrage zurückgegebenen Schüler wie folgt sehen:

SQLite Update

SQLite UPDATE Query wird zum Ändern der vorhandenen Datensätze in einer Tabelle verwendet. Sie können die WHERE-Klausel mit der UPDATE-Abfrage verwenden, um ausgewählte Zeilen zu aktualisieren. Die UPDATE-Klausel aktualisiert eine Tabelle, indem ein Wert für eine bestimmte Spalte geändert wird. Das Folgende ist die Syntax der UPDATE-Klausel:

Wie folgt:

  • Nach der "Update-Klausel" sollten Sie den zu aktualisierenden Tabellennamen schreiben.
  • Sie müssen die "SET-Klausel" schreiben, mit der der zu aktualisierende Spaltenname und der zu aktualisierende Wert geschrieben werden.
  • Sie können mehr als eine Spalte aktualisieren. Sie können zwischen jeder Zeile ein Komma verwenden.
  • Sie können eine WHERE-Klausel angeben, um nur einige Zeilen anzugeben. Nur die Zeilen, die der Ausdruck als wahr auswertet, werden aktualisiert. Wenn Sie keine WHERE-Klausel angegeben haben, werden alle Zeilen aktualisiert.

Beispiel für ein SQLite-Update

In der folgenden UPDATE-Anweisung aktualisieren wir die DepartmentId für den Studenten mit StudentId = 6 auf 3:

UPDATE StudentenSET DepartmentId = 3WHERE StudentId = 6;

Dies sollte erfolgreich ausgeführt werden und Sie sollten keine Ausgabe erhalten:

In der UPDATE-Klausel haben wir angegeben, dass die Tabelle Students aktualisiert werden soll.

  • In der WHERE-Klausel haben wir alle Schüler gefiltert, um nur die Zeile für StudentId = 6 auszuwählen.
  • Die SET-Klausel aktualisiert den Wert der Abteilungs-ID für die ausgewählten Schüler auf 3.

Überprüfen Sie nun, ob der Schüler mit ID 6 aktualisiert wurde, indem Sie den folgenden Befehl ausführen:

SELECT * FROM Students WHERE StudentId = 6;

Sie sollten jetzt sehen, dass der Wert für die Abteilungs-ID jetzt 3 ist:

SQLite Delete

Die SQLite DELETE-Abfrage wird verwendet, um vorhandene Datensätze aus einer angegebenen Tabelle zu entfernen. Sie können die WHERE-Klausel mit DELETE-Abfragen verwenden, um die ausgewählten Zeilen zu löschen.

Die DELETE-Klausel hat die folgende Syntax:

  • Sie müssen nach der DELETE FROM-Klausel einen Tabellennamen schreiben, aus dem Sie Datensätze löschen möchten. ( Hinweis: Mit der DELETE-Klausel werden einige Datensätze aus einer Tabelle oder alle Datensätze gelöscht, und die Tabelle selbst wird nicht gelöscht. Mit der DROP-Klausel wird jedoch die gesamte Tabelle mit allen darauf enthaltenen Datensätzen gelöscht. )
  • Wenn Sie die DELETE-Klausel wie folgt schreiben: "DELETE FROM Guru", werden alle Datensätze aus der Tabelle "Guru" gelöscht.
  • Sie können eine WHERE-Bedingung mit einem Ausdruck angeben, wenn Sie bestimmte Zeilen löschen möchten. Es werden nur die Zeilen gelöscht, für die der Ausdruck true ergibt. Beispiel: "DELETE FROM guru WHERE id> 5" - Hiermit werden nur die Datensätze gelöscht, deren ID größer als 5 ist.

Beispiel

In der folgenden Anweisung werden zwei Schüler mit StudentId 11 und 12 gelöscht:

LÖSCHEN VON Studenten, WO StudentId = 11 ODER StudentId = 12;

Der Ausdruck " StudentId = 11 ODER StudentId = 12 " gilt nur für Schüler mit den IDs 11 und 12. Die DELETE-Klausel wird daher auf beide angewendet und löscht sie nur.

Dieser Befehl sollte erfolgreich ausgeführt werden und Sie sollten keine Ausgabe wie folgt erhalten:

Sie können überprüfen, ob die beiden Schüler gelöscht wurden, indem Sie alle Datensätze aus der Schülertabelle wie folgt auswählen:

SELECT * FROM Students;

Sie sollten die beiden Schüler mit den IDs 11 und 12 nicht wie folgt sehen:

SQLite-Konfliktklausel

Angenommen, Sie haben eine Spalte mit einer der folgenden Spaltenbeschränkungen: EINZIGARTIG, NICHT NULL, PRÜFEN oder PRIMÄRTASTE. Anschließend haben Sie versucht, einen Wert in diese Spalte einzufügen oder zu aktualisieren, der mit dieser Einschränkung in Konflikt steht.

Wenn beispielsweise eine Spalte eine EINZIGARTIGE Einschränkung aufweist und Sie versucht haben, einen bereits vorhandenen Wert (einen doppelten Wert) einzufügen, der mit der EINZIGARTIGEN Einschränkung in Konflikt steht. Mit der CONFLICT-Klausel können Sie dann auswählen, was in solchen Fällen zur Lösung dieses Konflikts getan werden soll.

Bevor wir weiter erklären, wie die CONFLICT-Klausel den Konflikt löst. Sie sollten verstehen, was eine Datenbanktransaktion ist.

Datenbanktransaktion:

Der Begriff Datenbanktransaktion ist eine Liste von SQLite-Operationen (Einfügen oder Aktualisieren oder Löschen). Die Datenbanktransaktion muss als eine Einheit ausgeführt werden, entweder alle Operationen erfolgreich oder überhaupt nicht. Alle Vorgänge werden abgebrochen, wenn einer von ihnen nicht ausgeführt werden konnte.

Beispiel für eine Datenbanktransaktion:

Die Transaktion zum Überweisen von Geld von einem Bankkonto auf ein anderes umfasst einige Aktivitäten. Diese Transaktionsoperation umfasst das Abheben von Geld vom ersten Konto und das Einzahlen auf ein anderes Konto. Diese Transaktion muss vollständig abgeschlossen oder vollständig abgebrochen sein und darf nicht auf halbem Weg fehlschlagen.

Hier ist die Liste der fünf Auflösungen, die Sie in der CONFLICT-Klausel auswählen können:

  1. ROLLBACK - Hiermit wird die Transaktion zurückgesetzt, in der die aktuelle SQLite-Anweisung mit dem Konflikt vorliegt (die gesamte Transaktion wird abgebrochen). Wenn Sie beispielsweise versuchen, 10 Zeilen zu aktualisieren, und die fünfte Zeile einen Wert hat, der mit einer Einschränkung in Konflikt steht, werden keine Zeilen aktualisiert. Die 10 Zeilen bleiben gleich. Ein Fehler wird ausgelöst.
  2. ABORT - Hiermit wird nur die aktuelle SQLite-Anweisung abgebrochen (abgebrochen), bei der der Konflikt vorliegt, und die Transaktion wird nicht abgebrochen. Wenn Sie beispielsweise versuchen, 10 Zeilen zu aktualisieren, und die fünfte Zeile einen Wert aufweist, der mit einer Einschränkung in Konflikt steht, wird nur der fünfte Wert nicht aktualisiert, sondern die anderen 9 Zeilen. Ein Fehler wird ausgelöst.
  3. FAIL - bricht die aktuelle SQLite-Anweisung ab, die den Konflikt aufweist. Die Transaktion wird jedoch nicht fortgesetzt, aber die vorherigen Änderungen, die an Zeilen vor der Zeile mit dem Konflikt vorgenommen wurden, werden festgeschrieben. Wenn Sie beispielsweise versuchen, 10 Zeilen zu aktualisieren, und die fünfte Zeile einen Wert hat, der mit einer Einschränkung in Konflikt steht, werden nur die 4 Zeilen aktualisiert, die andere nicht. Ein Fehler wird ausgelöst.
  1. IGNORE - Hiermit wird die Zeile übersprungen , die die Einschränkungsverletzung enthält, und die anderen folgenden Zeilen der SQLite-Anweisung werden weiter verarbeitet. Wenn Sie beispielsweise versuchen, 10 Zeilen zu aktualisieren, und die fünfte Zeile einen Wert hat, der mit einer Einschränkung in Konflikt steht, werden nur die 4 Zeilen aktualisiert, die andere nicht. Es wird nicht weiter fortgesetzt, um andere Zeilen zu aktualisieren und an der Zeile anzuhalten, die den Konfliktwert hat. Es wird kein Fehler ausgegeben.
  1. ERSETZEN - Dies hängt von der Art der Einschränkung ab, bei der die Verletzung vorliegt :
  • Wenn eine Einschränkungsverletzung für die UNIQUE- oder PRIMARY KEY-Einschränkung vorliegt. Der REPLACE ersetzt die Zeile, die den Verstoß verursacht, durch die neu eingefügte oder aktualisierte Zeile.
  • Wenn eine NOT NULL-Einschränkungsverletzung vorliegt, ersetzt die REPLACE-Klausel den NULL-Wert durch den Standardwert dieser Spalte. Wenn die Spalte keinen Standardwert hat, bricht SQLite die Anweisung ab (die Anweisung wird abgebrochen).
  • Wenn die Verletzung der CHECK-Einschränkung auftritt, wird die Klausel abgebrochen.

Hinweis: Die oben genannten 5 Lösungen sind Optionen für die Lösung des Konflikts. Es ist möglicherweise nicht unbedingt erforderlich, was zur Lösung eines Konflikts gilt, um andere Arten von Konflikten zu lösen.

So deklarieren Sie die CONFLICT-Klausel

Sie können die ON CONFLICT-Klausel deklarieren, wenn Sie eine Einschränkung für eine Spaltendefinition in der CREATE TABLE-Klausel definieren. Verwendung der folgenden Syntax:

Sie können eine der fünf Lösungen auswählen, um den Konflikt wie zuvor erläutert zu lösen.

ON CONFLICT IGNORE Beispiel

Schritt 1) Erstellen Sie einen neuen Tabellengegenstand wie folgt:

TABELLE ERSTELLEN [Betreff] ([SubjectId] INTEGER NICHT NULL PRIMARY KEY ON CONFLICT IGNORE,[SubjectName] NVARCHAR NICHT NULL); 

Beachten Sie, dass wir für die Spalte SubjectId eine PRIMARY KEY-Einschränkung definiert haben. Mit der Primärschlüsseleinschränkung können nicht zwei doppelte Werte in die SubjectId-Spalte eingefügt werden, sodass alle Werte in dieser Spalte eindeutig sein sollten. Beachten Sie auch, dass wir eine Konfliktlösung als " IGNORE " auswählen .

Der Befehl sollte erfolgreich ausgeführt werden und Sie sollten keine Fehler erhalten:

Schritt 2) Fügen Sie nun einige Werte in die neuen Tabellensubjekte ein, jedoch mit einem Wert, der die Primärschlüsseleinschränkung verletzt:

INSERT INTO Subjects VALUES (1, 'Algebra');INSERT INTO Subjects VALUES (2, 'Datenbankkurs');INSERT INTO Subjects VALUES (2, 'Datenstrukturen');INSERT INTO Subjects VALUES (4, 'Algorithmen');

In dieser INSERT-Anweisung haben wir versucht, zwei Kurse mit derselben Primärschlüssel-Betreff-ID 2 einzufügen, was eine Verletzung der Primärschlüsseleinschränkung darstellt.

Die Befehle sollten einwandfrei funktionieren und Sie sollten keine Fehler erhalten. Wie folgt:

Schritt 3) Wählen Sie alle Themen wie folgt aus der Tabelle aus:

SELECT * FROM Subjects;

Dies gibt Ihnen die Liste der Themen:

Beachten Sie, dass anstelle von vier Zeilen nur drei Themen " Algebra, Datenbankkurs und Algorithmen " eingefügt wurden .

Die Zeile mit dem Wert, der gegen die Primärschlüsseleinschränkung "Datenstrukturen" verstößt, wurde ignoriert und nicht eingefügt. SQLite führt jedoch nach dieser Zeile weitere Anweisungen aus.

Schritt 4) LÖSCHEN Sie die Tabellensubjekte, um sie mit einer anderen ON CONFLICT-Klausel für das folgende Beispiel erneut zu erstellen, indem Sie den folgenden Befehl ausführen:

DROP TABLE Subjects; 

Der Befehl drop löscht die gesamte Tabelle. Tabellensubjekte existieren jetzt nicht.

ON CONFLICT REPLACE Beispiel

Schritt 1) Erstellen Sie einen neuen Tabellengegenstand wie folgt:

TABELLE ERSTELLEN [Betreff] ([SubjectId] INTEGER NICHT NULL PRIMARY KEY ON CONFLICT REPLACE,[SubjectName] NVARCHAR NICHT NULL); 

Beachten Sie, dass wir für die SubjectId-Spalte eine PRIMARY KEY-Einschränkung definiert haben. Mit der Primärschlüsseleinschränkung können nicht zwei doppelte Werte in die SubjectId-Spalte eingefügt werden, sodass alle Werte in dieser Spalte eindeutig sein sollten.

Beachten Sie auch, dass wir eine Konfliktlösungsoption als " ERSETZEN " auswählen . Der Befehl sollte erfolgreich ausgeführt werden und Sie sollten keine Fehler erhalten:

Schritt 2) Fügen wir nun einige Werte in die neue Tabelle Subjects ein, jedoch mit einem Wert, der die Primärschlüsseleinschränkung verletzt:

INSERT INTO Subjects VALUES (1, 'Algebra');INSERT INTO Subjects VALUES (2, 'Datenbankkurs');INSERT INTO Subjects VALUES (2, 'Datenstrukturen');INSERT INTO Subjects VALUES (4, 'Algorithmen');

In dieser INSERT-Anweisung haben wir versucht, zwei Kurse mit derselben Primärschlüssel-Betreff-ID 2 einzufügen, was eine Verletzung der Primärschlüsseleinschränkung darstellt.

Die Befehle sollten einwandfrei funktionieren und Sie sollten keine Fehler erhalten. Wie folgt:

Schritt 3) Wählen Sie alle Themen wie folgt aus der Tabelle aus:

SELECT * FROM Subjects;

Dies gibt Ihnen die Liste der Themen:

Beachten Sie, dass nur drei Themen " Algebra, Datenstrukturen und Algorithmen " eingefügt wurden, während wir versucht haben, 4 Zeilen einzufügen.

Die Zeile mit dem Wert, der gegen die Primärschlüsseleinschränkung " Datenstrukturen " verstößt, hat den Wert " Datenbankkurs " wie folgt ersetzt:

  • Die ersten beiden Einfügeanweisungen funktionieren problemlos. Zwei Fächer Algebra und Datenbankkurs werden mit den IDs 1, 2 eingefügt.
  • Wenn SQLite versucht, die dritte Einfügeanweisung mit SubjectId 2 und SubjectName " Data Structures " auszuführen, stellt es fest, dass bereits ein Betreff mit SubjectId = 2 vorhanden ist. Dies ist eine Verletzung für die in der Spalte SubjectId definierte Primärschlüsseleinschränkung.
  • SQLite wählt eine REPLACE-Lösung für diesen Konflikt. Es ersetzt den Wert, der bereits in der Subject-Tabelle vorhanden ist, durch den neuen Wert aus der insert-Anweisung. Daher wird der Betreffname " Datenbankkurs " durch den Betreffnamen " Datenstrukturen " ersetzt.

Zusammenfassung:

INSERT-, UPDATE- und DELETE-Klauseln werden verwendet, um die Daten in der SQLite-Datenbank zu ändern. Die CONFLICT-Klausel ist eine leistungsstarke Klausel zur Lösung von Konflikten zwischen den Daten und den zu ändernden Daten.