SQLite-Dokumentation
Kompakte, beispielorientierte SQLite-Referenz. Konzept lesen, Code ansehen, dann in einem Coddy-Lernweg üben.
Geführten SQLite-Lernweg startenErste Schritte
- Was ist SQLite?SQLite ist eine serverlose, dateibasierte SQL-Datenbank, die direkt in deiner Anwendung läuft. Was dahintersteckt, wo der Unterschied zu klassischen Datenbankservern liegt und wann sich SQLite wirklich lohnt.
- SQLite vs MySQLWo SQLite und MySQL sich wirklich unterscheiden – Architektur, Nebenläufigkeit, Datentypen und für welche Projekte die jeweilige Datenbank gemacht ist.
- SQLite vs PostgresWo SQLite und PostgreSQL sich wirklich unterscheiden – Architektur, Concurrency, Typsystem und für welche Projekte jede der beiden gemacht ist.
- Wann SQLite nutzenPraxisleitfaden: Wann ist SQLite die richtige Wahl – und wann solltest du lieber zu Postgres oder MySQL greifen?
- SQLite installierenSQLite unter Windows, macOS und Linux installieren – Kommandozeilen-Tool einrichten, in den PATH eintragen und prüfen, ob alles läuft.
- SQLite CLISo arbeitest du mit der sqlite3-Kommandozeile: Datenbanken öffnen, Queries absetzen, Dot-Commands verwenden und CSV-Daten importieren oder exportieren – alles direkt im Terminal.
- GUI-ToolsPraxisüberblick zu den GUI-Tools für SQLite: DB Browser for SQLite, SQLiteStudio und Online-Viewer im Vergleich – damit du .db-Dateien ohne Kommandozeile öffnest und bearbeitest.
- Datenbank erstellenSo legst du eine SQLite-Datenbank an: das Datei-Modell verstehen, mit dem `sqlite3`-Kommando arbeiten und warum es kein `CREATE DATABASE` gibt.
- In-Memory-DatenbankWie die In-Memory-Datenbank von SQLite funktioniert, wann `:memory:` wirklich Sinn ergibt und worin der Unterschied zu einer dateibasierten Datenbank liegt.
Tabellen und Typen
- CREATE TABLETabellen in SQLite anlegen: Spaltendefinitionen, Constraints, IF NOT EXISTS, temporäre Tabellen und CREATE TABLE AS SELECT – alles mit praktischen Beispielen.
- DatentypenWie SQLite Werte ablegt: die fünf Storage Classes, warum die Typisierung dynamisch ist und welche Stolperfallen besonders Umsteiger von Postgres oder MySQL erwischen.
- Type AffinityWie das Type-Affinity-System von SQLite funktioniert: die fünf Affinitäten, nach welchen Regeln SQLite sie aus deiner Spaltendeklaration ableitet – und warum in einer INTEGER-Spalte plötzlich ein String landen kann.
- STRICT TablesWie du mit STRICT Tables in SQLite die flexible Typablage abschaltest, falsche Werte abweisen lässt und endlich die Typprüfung bekommst, die du eigentlich erwartet hast.
- Primary KeysWie Primärschlüssel in SQLite wirklich funktionieren – vom Sonderfall INTEGER PRIMARY KEY über zusammengesetzte Schlüssel bis AUTOINCREMENT und den typischen Stolperfallen.
- ROWIDWas ROWID in SQLite wirklich ist, wann INTEGER PRIMARY KEY daraus deine eigene Spalte macht und wofür WITHOUT ROWID-Tabellen gut sind.
- NOT NULL & DEFAULTWie NOT NULL und DEFAULT in SQLite wirklich funktionieren – inklusive CURRENT_TIMESTAMP-Trick und den Stolperfallen, wenn man sie nachträglich hinzufügen will.
- CHECK ConstraintsSo setzt du CHECK-Constraints in SQLite richtig ein: Prüfungen auf einzelnen Spalten, Regeln über mehrere Spalten hinweg, benannte Constraints und die typischen Stolperfallen.
- UNIQUE ConstraintSo funktioniert die UNIQUE-Einschränkung in SQLite: auf Spalten- und Tabellenebene, mit zusammengesetzten Schlüsseln, dem NULL-Sonderfall und Tipps, wenn der Constraint einmal fehlschlägt.
- DROP & ALTER TABLESo löschst, benennst und änderst du Tabellen in SQLite – inklusive der Grenzen von ALTER TABLE und dem bewährten Rebuild-Trick für alles, was nicht direkt geht.
Daten einfügen und ändern
- INSERTWie INSERT in SQLite wirklich funktioniert: einzelne Zeilen, Mehrzeilen-Inserts, INSERT...SELECT, Default-Werte sowie die Konflikt-Modifizierer OR IGNORE und OR REPLACE.
- UPDATESo änderst du bestehende Zeilen in SQLite: UPDATE-Syntax, die rettende WHERE-Klausel, mehrere Spalten in einem Rutsch und UPDATE ... FROM für tabellenübergreifende Änderungen.
- DELETESo funktioniert DELETE in SQLite: WHERE-Bedingung sauber schreiben, alle Zeilen löschen, Cascade auf verknüpfte Tabellen und gelöschte Zeilen mit RETURNING zurückbekommen.
- UPSERTUPSERT in SQLite verstehen: ON CONFLICT richtig einsetzen, die excluded-Pseudotabelle nutzen, DO NOTHING vs. DO UPDATE und der Unterschied zu INSERT OR REPLACE.
- RETURNING-KlauselSo nutzt du die RETURNING-Klausel in SQLite, um die betroffenen Zeilen direkt aus INSERT, UPDATE oder DELETE zurückzubekommen – ganz ohne zweites Query.
- CSV importierenSo importierst du CSV-Dateien in SQLite mit dem .import-Befehl – inklusive Header, bestehender Tabellen, eigener Trennzeichen und der typischen Stolperfallen.
- Daten exportierenDaten aus SQLite exportieren – CSV mit Spaltenüberschriften, JSON, kompletter SQL-Dump und einzelne Tabellen sichern, alles direkt in der sqlite3-Shell.
Daten abfragen
- SELECT GrundlagenWie das SELECT-Statement in SQLite wirklich funktioniert: Spalten auswählen, Ausdrücke berechnen, Aliase setzen – und das mentale Modell hinter jeder Query, die du je schreiben wirst.
- WHERE-KlauselSo filterst du Zeilen mit der WHERE-Klausel in SQLite – Vergleichsoperatoren, AND/OR, LIKE, IN, BETWEEN und die NULL-Falle, in die fast jeder mal tappt.
- Operatoren & NULLWie sich SQLite-Operatoren bei NULL verhalten – warum `=` und `<>` hier nicht greifen und wann du stattdessen IS NULL, IS NOT NULL, COALESCE oder IFNULL brauchst.
- ORDER BYWie ORDER BY in SQLite funktioniert: auf- und absteigend sortieren, mehrere Spalten kombinieren, NULL-Werte steuern und Sortierung ohne Groß-/Kleinschreibung.
- LIMIT & OFFSETWie LIMIT und OFFSET in SQLite funktionieren – Zeilen begrenzen, überspringen, sauber paginieren und welche Performance-Falle du bei großen Tabellen kennen solltest.
- DISTINCTWie SELECT DISTINCT in SQLite funktioniert: einzelne und mehrere Spalten, Umgang mit NULL, COUNT(DISTINCT) und wann GROUP BY die bessere Wahl ist.
- CASE-AusdruckWie CASE in SQLite funktioniert: einfache und gesuchte Form, Einsatz in SELECT, ORDER BY und WHERE – und wann IIF die schlankere Wahl ist.
Funktionen und Aggregate
- String-FunktionenString-Funktionen in SQLite ganz praktisch erklärt: Verketten mit ||, SUBSTR, INSTR, REPLACE, TRIM – plus die typischen Muster zum Bereinigen und Umformen von Text direkt im SQL-Statement.
- Numerische FunktionenRechnen in SQLite — ROUND, ABS, CEIL, FLOOR, MOD, POWER, SQRT und RANDOM im Überblick. Plus die Integer-Division-Falle, in die jeder einmal tappt.
- Datum & ZeitWie SQLite Datums- und Zeitwerte speichert und verarbeitet — die fünf Datumsfunktionen, Formatstrings, Modifier und die Speicherentscheidungen, die deine Queries schnell halten.
- AggregatfunktionenWie Aggregatfunktionen in SQLite viele Zeilen zu einem einzigen Wert zusammenfassen – COUNT, SUM, AVG, MIN, MAX und GROUP_CONCAT, inklusive DISTINCT, FILTER und dem Umgang mit NULL.
- GROUP BY & HAVINGWie GROUP BY in SQLite Zeilen zu Gruppen zusammenfasst und HAVING diese Gruppen nach der Aggregation filtert – inklusive klarer Abgrenzung zwischen WHERE und HAVING.
Beziehungen und Joins
- Foreign KeysSo funktionieren Foreign Keys in SQLite: REFERENCES richtig deklarieren, Enforcement per PRAGMA aktivieren und die passende ON DELETE-Strategie wählen.
- INNER JOINWie INNER JOIN in SQLite funktioniert – das mentale Modell, die ON-Klausel, drei Tabellen verknüpfen und die USING-Kurzform.
- LEFT JOINWie LEFT JOIN in SQLite funktioniert: nicht zugeordnete Zeilen behalten, NULL-Werte richtig lesen, sauber filtern und mehrere Tabellen verknüpfen.
- Self JoinWie der Self Join in SQLite funktioniert: Zeilen einer Tabelle über Aliase paaren – mit praktischen Beispielen für Mitarbeiter-Manager-Beziehungen und Hierarchien.
- SubqueriesWie du in SQLite ein SELECT in ein anderes verschachtelst – skalare Subqueries, IN/EXISTS, abgeleitete Tabellen, korrelierte Subqueries und wann ein JOIN besser passt.
- CTEsWie Common Table Expressions in SQLite funktionieren – mit WITH Subqueries benennen, mehrere CTEs verketten und Abfragen schreiben, die sich von oben nach unten lesen lassen.
- Rekursive CTEsRekursive CTEs in SQLite verständlich erklärt: Aufbau aus Anker- und Recursive-Teil, Eltern-Kind-Bäume durchlaufen, Zahlenreihen erzeugen und Endlosschleifen vermeiden.
Indizes und Performance
- IndexeWie Indexe in SQLite intern funktionieren, wann sie Abfragen beschleunigen, wann sie eher bremsen – und wie du prüfst, ob der Query Planner sie tatsächlich nutzt.
- Composite IndexWie zusammengesetzte Indizes in SQLite funktionieren, warum die Spaltenreihenfolge entscheidend ist und wann ein Composite Index wirklich hilft – statt nur Platz zu fressen.
- Partial IndexPartial Indexes in SQLite: Wie du mit einer WHERE-Klausel nur die Zeilen indexierst, die du wirklich abfragst – und welche Muster (Soft Deletes, partielle Unique Constraints, heiße Teilmengen) sich richtig auszahlen.
- EXPLAIN QUERY PLANMit EXPLAIN QUERY PLAN siehst du in SQLite sofort, ob deine Abfrage einen Index nutzt, was SCAN und SEARCH bedeuten und wie Joins ausgeführt werden.
- ANALYZE & VACUUMWie `ANALYZE` und `VACUUM` deine SQLite-Datenbank schnell und schlank halten — was die beiden Befehle wirklich tun, wann du sie ausführen solltest und welche Varianten du kennen musst.
Fortgeschrittene Features
- TransaktionenWie Transaktionen in SQLite funktionieren — BEGIN, COMMIT, ROLLBACK, der Autocommit-Modus und die Modi DEFERRED, IMMEDIATE und EXCLUSIVE, die festlegen, wann Sperren gesetzt werden.
- SavepointsWie Savepoints in SQLite funktionieren – benannte Marker innerhalb einer Transaktion, zu denen du zurückrollen kannst, ohne gleich alles zu verwerfen.
- ViewsWie Views in SQLite funktionieren – Queries als virtuelle Tabellen speichern, wann temporäre Views sinnvoll sind und warum SQLite-Views standardmäßig schreibgeschützt sind.
- TriggerWie Trigger in SQLite funktionieren – BEFORE und AFTER, INSTEAD OF auf Views, die Referenzen OLD und NEW und wann sich ein Trigger wirklich lohnt.
- JSON in SQLiteWie SQLite JSON speichert und abfragt: Felder mit json_extract auslesen, Werte aktualisieren, Arrays per json_each entpacken und JSON-Pfade indexieren.
- Volltextsuche (FTS5)So baust du eine schnelle Volltextsuche in SQLite mit FTS5 — Virtual Tables anlegen, mit MATCH suchen, Ergebnisse per BM25 ranken und den Index sauber synchron halten.
- Window FunctionsWindow Functions in SQLite verständlich erklärt: OVER, PARTITION BY, Ranking-Funktionen, LAG/LEAD und Frame-Klauseln für laufende Summen.
- Generated ColumnsWie generierte Spalten in SQLite funktionieren: Syntax mit GENERATED ALWAYS AS, Unterschied zwischen VIRTUAL und STORED sowie Indizes auf berechneten Spalten.
- ATTACH DATABASEMit ATTACH DATABASE öffnest du mehrere SQLite-Dateien in einer Verbindung, fragst sie über Schema-Präfixe gemeinsam ab und trennst sie sauber wieder mit DETACH.
Sicherheit und Anwendungsintegration
- Prepared StatementsWas Prepared Statements in SQLite sind, warum es sie gibt und wie der Lifecycle aus prepare, bind, step und finalize in jedem Treiber funktioniert.
- Parameter bindenSo funktioniert Parameter Binding in SQLite: positionale Platzhalter, benannte Parameter und wie du Werte sicher aus deiner Anwendung übergibst.
- SQL-InjectionWarum String-Konkatenation in SQL-Queries brandgefährlich ist, wie SQL-Injection wirklich funktioniert – und wie du sie mit parametrisierten Queries in SQLite zuverlässig abstellst.
- App-VerbindungenWie Anwendungen eine SQLite-Datenbank öffnen und nutzen — Connection Strings, Dateipfade, Treiber für jede Sprache und die Einstellungen, die man von Anfang an richtig setzen sollte.
- MigrationsSo lässt sich ein SQLite-Schema sauber weiterentwickeln: mit PRAGMA user_version, durchnummerierten Migrationsskripten und Transaktionen, die jederzeit ein Rollback erlauben.
- WAL & NebenläufigkeitWie Write-Ahead Logging die Nebenläufigkeit in SQLite verändert: Leser und Schreiber blockieren sich nicht mehr gegenseitig – und was die -wal- und -shm-Dateien wirklich tun.
Produktion und Betrieb
- Backup & RestoreSo sicherst und stellst du eine SQLite-Datenbank zuverlässig wieder her – mit dem .backup-Befehl, VACUUM INTO und der Online-Backup-API. Plus: warum simples Datei-Kopieren ein Risiko ist.
- PRAGMA SettingsWelche PRAGMA-Statements wirklich zählen — journal_mode, synchronous, foreign_keys, busy_timeout und cache_size — und welche Werte du in Production setzen solltest.
- Häufige FehlerDie SQLite-Fehlermeldungen, die einem im Produktivbetrieb wirklich begegnen — von 'database is locked' über 'readonly database' bis 'disk image malformed' — und wie du sie löst.