SQLite INSERT-, UPDATE-, DELETE-Abfrage mit Beispiel
Die Datenänderungsklauseln in SQLite sind INSERT-, UPDATE- und DELETE-Anweisungen. Es wird zum Einfügen neuer Zeilen, zum Aktualisieren vorhandener Werte oder zum Löschen von Zeilen aus der Datenbank verwendet.
Beachten Sie, dass Sie für alle folgenden Beispiele sqlite3.exe ausführen und wie folgt eine Verbindung zur Beispieldatenbank öffnen müssen:
Schritt 1) In diesem Schritt
- Öffnen Sie „Arbeitsplatz“ und navigieren Sie zum folgenden Verzeichnis „C:\sqlite" und
- Dann öffnen Sie „sqlite3.exe"
Schritt 2) Öffnen Sie die Datenbank“TutorialsSampleDB.db“ durch den 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 in sie schreiben.
- Wenn Sie den Spaltennamen nicht eingeben, werden die Werte in alle in der Tabelle gefundenen Spalten in derselben Reihenfolge 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 Beispiel einfügen
Im folgenden Beispiel fügen wir zwei Zeilen in die Tabelle „Students“ ein, eine für jeden Studenten:
INSERT INTO Students(StudentId, StudentName, DepartmentId, DateOfBirth) VALUES(11, 'Ahmad', 4, '1997-10-12'); INSERT INTO Students VALUES(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 Student mit StudentId=11, StudentName = Ahmad, DepartmentId = 4 und DateOfBirth = 1997.
- Der zweite Student mit StudentId=12, StudentName = Aly, DepartmentId = 4 und DateOfBirth = 1996-10-12′.
In der ersten Anweisung haben wir die Spaltennamen aufgelistet „StudentId, StudentName, DepartmentId, DateOfBirth„In der zweiten Aussage haben wir das jedoch nicht getan.
Die vier Werte „12, 'Aly', 4, '1996-10-12'” wird in alle vier Spalten der Tabelle „Schüler“ in der gleichen Reihenfolge eingefügt, in der die Spalten definiert sind.
Überprüfen wir nun, ob die beiden Studenten in die Tabelle „Students“ eingefügt wurden, indem wir den folgenden Befehl ausführen: query:
SELECT * FROM Students;
Anschließend sollten Sie die beiden Studenten sehen, die von dieser Abfrage wie folgt zurückgegeben wurden:
SQLite Aktualisierung
SQLite Die UPDATE-Abfrage wird verwendet, um die vorhandenen Datensätze in einer Tabelle zu ändern. Sie können die WHERE-Klausel mit der UPDATE-Abfrage verwenden, um ausgewählte Zeilen zu aktualisieren. Die UPDATE-Klausel aktualisiert eine Tabelle, indem sie einen Wert für eine bestimmte Spalte ändert. Die Syntax der UPDATE-Klausel lautet wie folgt:
Wie folgt:
- Nach der „Update-Klausel“ sollten Sie den Namen der zu aktualisierenden Tabelle schreiben.
- Sie müssen eine „SET-Klausel“ schreiben, die zum Schreiben des zu aktualisierenden Spaltennamens und des zu aktualisierenden Werts verwendet wird.
- 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.
SQLite Update-Beispiel
In der folgenden UPDATE-Anweisung aktualisieren wir die DepartmentId für den Studenten mit StudentId = 6 auf 3:
UPDATE Students SET DepartmentId = 3 WHERE StudentId = 6;
Dies sollte erfolgreich ausgeführt werden und Sie sollten keine Ausgabe erhalten:
In der UPDATE-Klausel haben wir angegeben, dass wir die Tabelle Students aktualisieren möchten.
- In der WHERE-Klausel haben wir alle Studenten 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 Studenten auf 3.
Überprüfen wir nun, ob der Student mit der ID 6 aktualisiert wurde, indem wir den folgenden Befehl ausführen:
SELECT * FROM Students WHERE StudentId = 6;
Sie sollten nun sehen, dass der Abteilungs-ID-Wert nun 3 ist, wie folgt:
SQLite Löschen
SQLite Die 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: , dass die DELETE-Klausel wird verwendet, um einige Datensätze aus einer Tabelle oder alle Datensätze zu löschen. Die Tabelle selbst wird nicht gelöscht. Allerdings ist die DROP-Klausel wird verwendet, um die gesamte Tabelle mit allen darin enthaltenen Datensätzen zu löschen.)
- Wenn Sie die DELETE-Klausel wie folgt schreiben: „DELETE FROM guru“, werden dadurch 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. Nur die Zeilen, für die der Ausdruck „true“ ergibt, werden gelöscht. Beispiel: „DELETE FROM guru WHERE id > 5“ – dadurch werden nur die Datensätze gelöscht, deren ID größer als 5 ist.
Beispiel
In der folgenden Anweisung löschen wir zwei Studenten mit den StudentIds 11 und 12:
DELETE FROM Students WHERE StudentId = 11 OR 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 also auf beide angewendet und löscht nur sie.
Dieser Befehl sollte erfolgreich ausgeführt werden und Sie sollten keine Ausgabe wie die folgende erhalten:
Sie können überprüfen, ob die beiden Studenten gelöscht wurden, indem Sie alle Datensätze aus der Tabelle „Students“ wie folgt auswählen:
SELECT * FROM Students;
Sie sollten die beiden Schüler mit den IDs 11 und 12 wie folgt nicht sehen:
SQLite Konfliktklausel
Angenommen, Sie haben eine Spalte mit einer der folgenden Spalteneinschränkungen: UNIQUE, NOT NULL, CHECK oder PRIMARY KEY. Und dann haben Sie versucht, in dieser Spalte einen Wert einzufügen oder zu aktualisieren, der mit dieser Einschränkung in Konflikt steht.
Wenn eine Spalte beispielsweise über eine UNIQUE-Einschränkung verfügt und Sie versucht haben, einen bereits vorhandenen Wert (einen doppelten Wert) einzufügen, liegt ein Konflikt mit der UNIQUE-Einschränkung vor. 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, Aktualisieren oder Löschen). Die Datenbanktransaktion muss als eine Einheit ausgeführt werden, entweder alle Operationen werden erfolgreich ausgeführt oder gar nicht. Alle Operationen werden abgebrochen, wenn eine davon nicht ausgeführt werden konnte.
Beispiel für eine Datenbanktransaktion
Die Transaktion zum Überweisen von Geld von einem Bankkonto auf ein anderes umfasst mehrere Aktivitäten. Diese Transaktionsoperation umfasst die Abhebung von Geld vom ersten Konto und die Einzahlung auf ein anderes Konto. Diese Transaktion muss vollständig abgeschlossen oder vollständig abgebrochen werden und darf nicht auf halbem Weg abgebrochen werden.
Hier ist die Liste der fünf Lösungen, die Sie in der CONFLICT-Klausel auswählen können:
- ZURÜCKSETZEN – Dadurch wird die Transaktion zurückgesetzt, in der sich die aktuelle befindet SQLite Anweisung, die den Konflikt hat (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. Es wird ein Fehler ausgegeben.
- ABTREIBUNG – Dadurch wird der aktuelle Vorgang abgebrochen SQLite Nur die Anweisung enthält den Konflikt und die Transaktion wird nicht 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, wird nur der fünfte Wert nicht aktualisiert, die anderen 9 Zeilen jedoch. Es wird ein Fehler ausgegeben.
- SCHEITERN - bricht den Strom ab SQLite Aussage, die den Konflikt enthält. Die Transaktion wird jedoch nicht fortgesetzt, sondern die vorherigen Änderungen, die an Zeilen vor der Zeile mit dem Konflikt vorgenommen wurden, werden übernommen. 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 und die anderen nicht. Es wird ein Fehler ausgegeben.
- IGNORIEREN – Dadurch wird die Zeile mit der Einschränkungsverletzung übersprungen und die Verarbeitung der anderen folgenden Zeilen des SQLite Stellungnahme. 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 und die anderen nicht. Es wird nicht weiter mit der Aktualisierung anderer Zeilen fortgefahren und bei der Zeile angehalten, die den Konfliktwert hat. Es wird kein Fehler ausgegeben.
- REPLACE – es hängt von der Art der Einschränkung ab, die den Verstoß verursacht:
- Wenn eine Einschränkungsverletzung für die UNIQUE- oder PRIMARY KEY-Einschränkung vorliegt. Mit REPLACE wird die Zeile, die den Verstoß verursacht, durch die neu eingefügte oder aktualisierte Zeile ersetzt.
- 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, dann SQLite wird die Anweisung abbrechen (Anweisung wird abgebrochen)
- Wenn die CHECK-Beschränkungsverletzung auftritt, wird die Klausel abgebrochen.
Hinweis: Die oben genannten 5 Lösungen sind Optionen, wie Sie den Konflikt lösen möchten. Es muss nicht notwendigerweise sein, dass das, was zur Lösung eines Konflikts gilt, auch zur Lösung anderer Arten von Konflikten anwendbar ist.
So deklarieren Sie die CONFLICT-Klausel
Sie können die Klausel ON CONFLICT deklarieren, wenn Sie eine Einschränkung für eine Spaltendefinition innerhalb der Klausel CREATE TABLE definieren. Verwenden Sie dazu die folgende Syntax:
Sie können eine der fünf Lösungen auswählen, um den Konflikt wie zuvor erläutert zu lösen.
BEISPIEL ZUM KONFLIKT IGNORIEREN
Schritt 1) Erstellen Sie wie folgt einen neuen Tabellensubjekt:
CREATE TABLE [Subjects] ( [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE, [SubjectName] NVARCHAR NOT NULL );
Beachten Sie, dass wir eine PRIMARY KEY-Einschränkung für die Spalte „SubjectId“ definiert haben. Die Primärschlüsseleinschränkung lässt nicht zu, dass zwei doppelte Werte in die Spalte „SubjectId“ eingefügt werden, sodass alle Werte in dieser Spalte eindeutig sein sollten. Beachten Sie auch, dass wir eine Konfliktlösung wie folgt wählen:IGNORIEREN".
Der Befehl sollte erfolgreich ausgeführt werden und Sie sollten keine Fehler erhalten:
Schritt 2) Fügen wir nun einige Werte in die neuen Tabellensubjekte ein, allerdings mit einem Wert, der die Primärschlüsseleinschränkung verletzt:
INSERT INTO Subjects VALUES(1, 'Algebra'); INSERT INTO Subjects VALUES(2, 'Database Course'); INSERT INTO Subjects VALUES(2, 'Data Structures'); INSERT INTO Subjects VALUES(4, 'Algorithms');
In dieser INSERT-Anweisung haben wir versucht, zwei Kurse mit derselben Primärschlüssel-Betreff-ID 2 einzufügen, was einen Verstoß gegen die Primärschlüsselbeschränkung darstellt.
Die Befehle sollten einwandfrei ausgeführt werden und es sollten keine Fehler auftreten. Wie folgt:
Schritt 3) Wählen Sie alle Themen aus der Tabelle wie folgt aus:
SELECT * FROM Subjects;
Dadurch erhalten Sie die Themenliste:
Beachten Sie, dass nur drei Themen eingefügt wurden „Algebra, Datenbankkurs und Algorithms” statt 4 Reihen.
Die Zeile mit dem Wert, der gegen die Primärschlüsseleinschränkung verstößt, nämlich „Datenstrukturen“, wurde ignoriert und nicht eingefügt. Jedoch, SQLite führt nach dieser Zeile weiterhin andere 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 Drop-Befehl löscht die gesamte Tabelle. Tabellensubjekte existieren jetzt nicht.
ON CONFLICT REPLACE Beispiel
Schritt 1) Erstellen Sie wie folgt einen neuen Tabellensubjekt:
CREATE TABLE [Subjects] ( [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE, [SubjectName] NVARCHAR NOT NULL );
Beachten Sie, dass wir eine PRIMARY KEY-Einschränkung für die SubjectId-Spalte definiert haben. Die Primärschlüsseleinschränkung lässt nicht zu, dass zwei doppelte Werte in die Spalte „SubjectId“ eingefügt werden, sodass alle Werte in dieser Spalte eindeutig sein sollten.
Beachten Sie auch, dass wir eine Konfliktlösungsoption wie folgt wählen:REPLACE„. 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, allerdings mit einem Wert, der die Primärschlüsseleinschränkung verletzt:
INSERT INTO Subjects VALUES(1, 'Algebra'); INSERT INTO Subjects VALUES(2, 'Database Course'); INSERT INTO Subjects VALUES(2, 'Data Structures'); INSERT INTO Subjects VALUES(4, 'Algorithms');
In dieser INSERT-Anweisung haben wir versucht, zwei Kurse mit derselben Primärschlüssel-Betreff-ID 2 einzufügen, was einen Verstoß gegen die Primärschlüsselbeschränkung darstellt.
Die Befehle sollten einwandfrei ausgeführt werden und es sollten keine Fehler auftreten. Wie folgt:
Schritt 3) Wählen Sie alle Themen aus der Tabelle wie folgt aus:
SELECT * FROM Subjects;
Dadurch erhalten Sie die Themenliste:
Beachten Sie, dass nur drei Themen eingefügt wurden „Algebra, Datenstrukturen und Algorithms” während wir versucht haben, 4 Zeilen einzufügen.
Die Zeile mit dem Wert, der gegen die Primärschlüsseleinschränkung verstößt, nämlich „Datenstrukturen„ersetzte den Wert „Datenbankkurs“ wie folgt:
- Die ersten beiden INSERT-Anweisungen laufen einwandfrei und ohne Probleme. Zwei Fächer Algebra und Datenbankkurs werden mit den IDs 1, 2 eingefügt.
- Wann SQLite versucht, die dritte Einfügeanweisung mit SubjectId 2 und SubjectName auszuführen.Datenstrukturen„Es stellt fest, dass bereits ein Subjekt mit SubjectId = 2 vorhanden ist. Dies stellt einen Verstoß gegen die Primärschlüsseleinschränkung dar, die in der Spalte „SubjectId“ definiert ist.
- SQLite wählt für diesen Konflikt eine REPLACE-Lösung. Es ersetzt den Wert, der bereits in der Subjects-Tabelle vorhanden ist, durch den neuen Wert aus der Insert-Anweisung. Also, die „Datenbankkurs„Betreffname wird ersetzt durch „Datenstrukturen" Subjekt Name.
Zusammenfassung
INSERT-, UPDATE- und DELETE-Klauseln werden zum Ändern der Daten in verwendet SQLite Datenbank. Die CONFLICT-Klausel ist eine leistungsstarke Klausel zur Lösung von Konflikten zwischen den Daten und den zu ändernden Daten.