Zeilen hinzufügen mit INSERT
Bisher haben deine Abfragen die Daten nur gelesen: Was du auch gefragt hast, die Tabellen blieben gleich. Die Daten eines Shops ändern sich aber ständig. Neue Kunden melden sich an, Preise steigen und fallen, Bestellungen kommen herein. In dieser Lektion lernst du die Anweisungen, die Daten verändern: INSERT fügt Zeilen hinzu, UPDATE ändert sie und DELETE löscht sie.
Eine neue Zeile fügst du mit INSERT INTO hinzu. Diese Anweisung fügt dem Shop ein neues Spiel hinzu:
INSERT INTO spiele (id, titel, genre, preis, erschienen, altersfreigabe)
VALUES (21, 'Snow Patrol', 'Action', 20, '2026-03-12', 12);Nach INSERT INTO kommt die Tabelle und, in Klammern, die Spalten, die du füllst. Nach VALUES kommen die Werte, ebenfalls in Klammern und in derselben Reihenfolge: Der erste Wert kommt in die erste Spalte, der zweite Wert in die zweite Spalte und so weiter. Text und Datumsangaben stehen in einfachen Anführungszeichen, Zahlen ohne, genau wie in WHERE. Und NULL bedeutet wie immer: kein Wert.
Ein INSERT findet keine Zeilen, also hat er keine Ergebnistabelle. Stattdessen zeigt das Ergebnis, wie viele Zeilen er geändert hat: Geänderte Zeilen: 1. Um die neue Zeile zu sehen, fragst du sie in derselben Datei unterhalb des INSERT ab:
SELECT *
FROM spiele
WHERE id = 21;| id | titel | genre | preis | erschienen | altersfreigabe |
|---|---|---|---|---|---|
| 21 | Snow Patrol | Action | 20 | 2026-03-12 | 12 |
Jedes Ausführen beginnt mit einer frischen Kopie der Datenbank. Der INSERT fügt Snow Patrol hinzu, die Abfrage darunter zeigt das Spiel, und wenn du erneut auf Ausführen klickst, ist die Datenbank wieder so wie am Anfang, und der INSERT fügt das Spiel noch einmal hinzu. In diesem Kurs kannst du also nichts kaputt machen: Probiere so viel aus, wie du willst. Es bedeutet aber auch, dass die Anweisungen, die Daten ändern, und die Abfragen, die die Änderung zeigen, in derselben Datei stehen müssen. Der Tab Tabellen zeigt die Tabellen immer so, wie sie am Anfang sind, bevor deine Anweisungen laufen. (In einer echten Datenbank bleibt eine Änderung für immer bestehen. Deshalb lehrt dich diese Lektion auch, vorsichtig zu sein.)
Du kannst die Liste der Spalten weglassen: INSERT INTO spiele VALUES (21, 'Snow Patrol', …); braucht dann einen Wert für jede Spalte der Tabelle, in der Reihenfolge, in der die Tabelle sie hat. Programmierer vermeiden das. Die Anweisung ist schwerer zu lesen (welche Zahl ist der Preis und welche die Altersfreigabe?), und wenn die Tabelle eines Tages eine neue Spalte bekommt, funktioniert sie nicht mehr. Nenne die Spalten immer.
Typischer Fehler: Werte, die nicht zu den Spalten passen. Wenn es mehr oder weniger Werte als Spalten gibt, sagt SQLite das, zum Beispiel 4 values for 3 columns. Werte in der falschen Reihenfolge sind schlimmer: Mit (preis, altersfreigabe) und VALUES (12, 20) kostet das Spiel 12 € und ist ab 20 Jahren, und kein Fehler sagt dir das. Prüfe, dass jeder Wert unter seiner Spalte steht.
So schreibst du es:
Anweisungen
- 1
Ein neuer Kunde hat sich gerade im Shop angemeldet: Lina Weber aus Dresden mit der E-Mail-Adresse
lina.weber@mail.de. Sie ist am 12.01.2026 beigetreten, und Noah Winter, der Kunde mit der ID 4, hat ihr den Shop empfohlen. Füge sie mit der ID 15 der Tabellekundenhinzu. Nenne imINSERTalle sechs Spalten. - 2
Zeige unter dem
INSERTalle Spalten der Kunden, deren ID größer als 12 ist, sortiert nach der ID. Die letzte Zeile ist Lina:id name email stadt beigetreten geworben_von 13 Sophie Arnold sophie.arnold@mail.de Leipzig 2025-08-21 11 14 Max Krause max.krause@mail.de Berlin 2025-10-03 NULL 15 Lina Weber lina.weber@mail.de Dresden 2026-01-12 4 - 3
Der Shop wird auch ein neues Spiel verkaufen: Pirate's Cove, ein Adventure für 25 € ab 12 Jahren, das am 03.04.2026 erscheint. Füge es mit der ID 21 hinzu (achte auf den Apostroph im Titel). Zeige danach den Titel, den Preis und das Erscheinungsdatum aller Adventures (Genre
Adventure), sortiert nach dem Titel:titel preis erschienen Lost Temple 20 2022-04-07 Mystery Manor 25 NULL Ocean Deep 15 2021-08-30 Pirate's Cove 25 2026-04-03