SQLite INSERT-, UPDATE-, DELETE-Abfrage mit Beispiel

⚡ Intelligente Zusammenfassung

SQLite INSERT-, UPDATE- und DELETE-Anweisungen verändern Daten in einer Datenbank, indem sie neue Zeilen hinzufügen, vorhandene Werte ändern und Datensätze entfernen. Die ON CONFLICT-Klausel legt fest, wie Integritätsverletzungen während dieser Operationen aufgelöst werden.

  • 📝 EINFÜGEN: Die INSERT-Anweisung fügt eine oder mehrere neue Zeilen hinzu und listet die Zielspalten und ihre Werte mit der VALUES-Klausel auf.
  • ️ AKTUALISIEREN: Die UPDATE-Anweisung ändert vorhandene Spaltenwerte, wobei SET für neue Daten und WHERE für bestimmte Zeilen verwendet wird.
  • 🗑️ LÖSCHEN: Die DELETE-Anweisung entfernt Zeilen, die einer WHERE-Bedingung entsprechen, oder jede Zeile, wenn die WHERE-Klausel weggelassen wird.
  • ⚠️ Konfliktklausel: Die ON CONFLICT-Klausel behebt Integritätsverletzungen durch ROLLBACK, ABORT, FAIL, IGNORE oder REPLACE.
  • 🔁 Transaktionen: Eine Datenbanktransaktion fasst mehrere Operationen zu einer Einheit zusammen, die entweder vollständig abgeschlossen oder vollständig abgebrochen wird.
  • 🤖 KI-Unterstützung: KI-Text-zu-SQL-Tools und GitHub Copilot generieren SQLite INSERT-, UPDATE- und DELETE-Anweisungen anhand von Eingabeaufforderungen in einfacher Sprache.

SQLite INSERT-, UPDATE-, DELETE-Abfrage

Einfüge-, Aktualisierungs- und Löschabfrage in SQLite

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
  • Öffnen Sie anschließend „sqlite3.exe“:

SQLite Abfrage – EINFÜGEN, AKTUALISIEREN, DELETE

Schritt 2) Öffnen Sie die Datenbank „TutorialsSampleDB.db“ mit folgendem 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 „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 alle vier Spalten der Tabelle Students 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 Update

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 Update

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 Update

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 Update

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

  • Nach der DELETE FROM-Klausel muss der Name der Tabelle angegeben werden, aus der Datensätze gelöscht werden sollen. (Hinweis: Die DELETE-Klausel dient dazu, einzelne Datensätze aus einer Tabelle oder alle Datensätze zu löschen; die Tabelle selbst wird dadurch nicht gelöscht. Die DROP-Klausel hingegen löscht die gesamte Tabelle mit allen darin enthaltenen Datensätzen.)
  • 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“ trifft nur auf Studenten mit den IDs 11 und 12 zu. Daher wird die DELETE-Klausel auf beide angewendet und löscht nur diese.

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. ROLLBACK – Dadurch wird die Transaktion rückgängig gemacht, bei der die aktuelle 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. ABBRECHEN – Dadurch wird der aktuelle Vorgang abgebrochen (annulliert). 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. FEHLGESCHLAGEN – bricht den aktuellen Vorgang 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.
  4. IGNORIEREN – Dadurch wird die Zeile, die die Integritätsverletzung enthält, übersprungen und die Verarbeitung der folgenden Zeilen fortgesetzt. 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.
  5. ERSETZEN – es hängt von der Art der Einschränkung ab, die verletzt wird:
    • 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 fünf Lösungsansätze bieten Ihnen verschiedene Möglichkeiten, den Konflikt beizulegen. Eine Lösung, die sich für einen Konflikt eignet, ist nicht zwangsläufig auch für andere Konfliktarten anwendbar.

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 für die Spalte „SubjectId“ eine Primärschlüsselbedingung definiert haben. Diese verhindert, dass zwei identische Werte in die Spalte „SubjectId“ eingefügt werden, sodass alle Werte in dieser Spalte eindeutig sind. Beachten Sie außerdem, dass wir für die Konfliktlösung die Option „IGNORIEREN“ gewählt haben.

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 Fächer 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 außerdem, dass wir als Konfliktlösungsoption „ERSETZEN“ gewählt haben. Der Befehl sollte erfolgreich ausgeführt werden und es sollten keine Fehler auftreten:

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 Fächer eingefügt wurden: „Algebra, Datenstrukturen und Algorithms” während wir versucht haben, 4 Zeilen einzufügen.

Die Zeile, deren Wert gegen die Primärschlüsselbedingung verstößt, nämlich „Data Structures“, hat den Wert „Database Course“ wie folgt ersetzt:

  • 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 Beim Versuch, die dritte Einfügeanweisung mit SubjectId 2 und SubjectName „Data Structures“ auszuführen, stellt das Programm fest, dass bereits ein Subjekt mit SubjectId = 2 existiert. Dies stellt einen Verstoß gegen die für die Spalte SubjectId definierte Primärschlüsselbedingung dar.
  • SQLite Für diesen Konflikt wird eine REPLACE-Lösung gewählt. Dabei wird der bereits in der Tabelle „subjects“ vorhandene Wert durch den neuen Wert aus der INSERT-Anweisung ersetzt. Somit wird der Eintrag „Database Course“ SubjectName durch „Data Structures“ SubjectName ersetzt.

Häufig gestellte Fragen

UPSERT kombiniert Einfügen und Aktualisieren. SQLite 3.24.0 (2018), INSERT INTO … ON CONFLICT(Spalte) DO UPDATE SET … fügt eine neue Zeile ein oder aktualisiert die vorhandene, wenn ein Konflikt mit einem UNIQUE- oder PRIMARY KEY auftritt. DO NOTHING überspringt die Zeile stattdessen stillschweigend.

INSERT OR REPLACE löscht die konfliktbehaftete Zeile und fügt eine neue ein, sodass nicht aufgeführte Spalten auf ihre Standardwerte zurückgesetzt werden. ON CONFLICT DO UPDATE bearbeitet die vorhandene Zeile an Ort und Stelle und behält die Standardwerte bei.ping Die anderen Spalten bleiben intakt, was es zu einem sichereren echten Upsert macht.

Führen Sie nach VALUES mehrere Wertegruppen durch Kommas getrennt auf: INSERT INTO Students (id, name) VALUES (1,'A'), (2,'B'), (3,'C');. Dieses Formular mit mehreren Zeilen funktioniert, da SQLite 3.7.11 und ist schneller als die Ausführung einer INSERT-Anweisung pro Zeile.

Führe DELETE FROM table_name; ohne WHERE-Klausel aus. SQLite Es gibt keinen TRUNCATE-Befehl, aber es wird eine Optimierung angewendet, die alle Zeilen gleichzeitig löscht. Die Tabellenstruktur bleibt erhalten; verwenden Sie DROP TABLE, um die Tabelle vollständig zu entfernen.

Da SQLite Ab Version 3.35.0 (2021) akzeptieren die Funktionen INSERT, UPDATE und DELETE eine optionale RETURNING-Klausel, die die betroffenen Zeilen ausgibt. Beispielsweise gibt INSERT … RETURNING id; die generierten Werte sofort zurück, sodass kein separater SELECT-Befehl zum Auslesen der Änderungen erforderlich ist.

Verwenden Sie INSERT INTO … SELECT: INSERT INTO Archive (id, name) SELECT id, name FROM Students WHERE DepartmentId = 4;. SQLite Es wird jede Zeile eingefügt, die die SELECT-Anweisung zurückgibt, daher müssen Spaltenreihenfolge und Anzahl mit der Zieltabelle übereinstimmen.

Ja. KI-Text-zu-SQL-Assistenten wandeln Anfragen in Klartext um in SQLite INSERT-, UPDATE- und DELETE-Anweisungen, einschließlich WHERE- und ON CONFLICT-Klauseln. Die Angabe von Tabellen- und Spaltennamen verbessert die Genauigkeit. Jede generierte Anweisung sollte vor der Ausführung mit echten Daten überprüft und getestet werden.

GitHub-Copilot schlägt vor SQLite INSERT-, UPDATE- und DELETE-Abfragen direkt in Editoren wie VS CodeEs liest das umliegende Schema und die Kommentare, sodass die Vervollständigungen Ihre tatsächlichen Tabellen- und Spaltennamen wiederverwenden. Sie sollten aber trotzdem jede Anweisung vor der Ausführung überprüfen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: