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

  1. ร–ffnen Sie โ€žArbeitsplatzโ€œ und navigieren Sie zum folgenden Verzeichnis โ€žC:\sqlite" und
  2. Dann รถffnen Sie โ€žsqlite3.exe"

SQLite Abfrage โ€“ EINFรœGEN, AKTUALISIEREN, DELETE

Schritt 2) ร–ffnen Sie die Datenbankโ€œTutorialsSampleDB.dbโ€œ durch den folgenden Befehl:

.open TutorialsSampleDB.db

SQLite Abfrage โ€“ EINFรœGEN, AKTUALISIEREN, DELETE

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:

SQLite INSERT

  • 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:

SQLite Insert

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 Insert

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:

SQLite Aktualisierung

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:

SQLite Aktualisierung

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 Aktualisierung

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:

SQLite Lรถschen

  • 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:

SQLite Lรถschen

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 Lรถschen

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:

  1. 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.
  2. 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.
  3. 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.
  1. 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.
  1. 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:

SQLite Konfliktklausel

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:

BEISPIEL ZUM KONFLIKT IGNORIEREN

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:

BEISPIEL ZUM KONFLIKT IGNORIEREN

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

SELECT * FROM Subjects;

Dadurch erhalten Sie die Themenliste:

BEISPIEL ZUM KONFLIKT IGNORIEREN

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:

ON CONFLICT REPLACE Beispiel

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:

ON CONFLICT REPLACE Beispiel

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

SELECT * FROM Subjects;

Dadurch erhalten Sie die Themenliste:

ON CONFLICT REPLACE Beispiel

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.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: