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.
- Wenn die Funktion 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.


















