Menu

SQLite CLI: Die sqlite3-Shell im Terminal nutzen

So arbeitest du mit der sqlite3-Kommandozeile: Datenbanken öffnen, Queries absetzen, Dot-Commands verwenden und CSV-Daten importieren oder exportieren – alles direkt im Terminal.

Diese Seite enthält ausführbare Editoren — bearbeiten, ausführen und Ausgabe sofort sehen.

Was die CLI eigentlich ist

sqlite3 ist die offizielle Kommandozeile, die zusammen mit SQLite ausgeliefert wird. Sie öffnet eine Datenbankdatei, zeigt dir einen Prompt und führt dort dein SQL aus. Kein Server, kein Login, keine Konfiguration – einfach nur eine Binary und eine Datei.

In der Praxis nutzt du die sqlite3 Kommandozeile für schnelle Blicke in die Daten, einmalige Abfragen, das Exportieren von Schemas oder zum Importieren von Daten. Schneller kommst du nirgends an eine Datenbank ran, ohne dafür extra Code schreiben zu müssen.

$ sqlite3 mydata.db
SQLite version 3.45.0
Enter ".help" for usage hints.
sqlite>

Falls mydata.db noch nicht existiert, legt SQLite die Datei automatisch an, sobald du die erste Änderung machst. Startest du sqlite3 ganz ohne Dateinamen, bekommst du eine flüchtige In-Memory-Datenbank, die nach dem Beenden wieder verschwindet.

SQL direkt im sqlite3 Kommandozeilen-Prompt ausführen

Sobald du in der SQLite Shell bist, kannst du SQL eintippen — jede Anweisung muss mit einem Semikolon abgeschlossen werden. Genau darauf wartet die Shell: Drückst du Enter ohne Semikolon, erscheint einfach ein Fortsetzungs-Prompt in der nächsten Zeile.

Das Semikolon ist das Signal „Fertig, jetzt ausführen!". Vergisst du es, bleibt die Shell einfach hängen und zeigt dir einen ...>-Prompt – sie wartet auf den Abschluss. In dem Fall einfach ; in eine neue Zeile tippen, dann läuft es weiter.

Dot Commands sind kein SQL

Alles, was mit einem . beginnt, ist ein sogenannter Dot Command – also eine Anweisung an die Shell selbst, nicht an die SQL-Engine. Diese Befehle brauchen kein Semikolon und funktionieren ausschließlich innerhalb der sqlite3-Shell.

sqlite> .tables
books

sqlite> .schema books
CREATE TABLE books (
  id INTEGER PRIMARY KEY,
  title TEXT NOT NULL,
  year INTEGER
);

sqlite> .help

Diese paar Befehle wirst du ständig brauchen:

  • .tables — listet alle Tabellen der aktuellen Datenbank auf.
  • .schema [table] — zeigt das CREATE TABLE-Statement für eine bestimmte Tabelle oder für alle.
  • .databases — listet die angehängten Datenbankdateien.
  • .mode <format> — legt fest, wie Abfrageergebnisse dargestellt werden.
  • .headers on — zeigt die Spaltennamen über den Ergebnissen an.
  • .read file.sql — führt eine SQL-Datei aus.
  • .exit oder .quit — beendet die Shell.

Mit .help bekommst du die komplette Liste. Insgesamt gibt es Dutzende davon, aber im Alltag nutzt du höchstens zehn.

Ergebnisse lesbar machen

Standardmäßig trennt die SQLite-Shell die Ausgabe mit Pipe-Zeichen und blendet Spaltennamen aus — praktisch für Skripte, aber zum Lesen unbrauchbar. Zwei Dot Commands schaffen Abhilfe:

sqlite> .headers on
sqlite> .mode column
sqlite> SELECT * FROM books;
id  title        year
--  -----------  ----
1   Dune         1965
2   Neuromancer  1984

Weitere praktische Modi:

  • .mode box — zeichnet eine Tabelle mit Unicode-Rahmen. Sieht auf Screenshots richtig schick aus.
  • .mode csv — kommagetrennt, ideal zum Weiterverarbeiten in anderen Tools.
  • .mode json — Ausgabe als JSON, ein Objekt pro Zeile.
  • .mode line — eine Spalte pro Zeile, praktisch bei breiten Datensätzen.

Diese Einstellungen sind bei jedem Start der Shell wieder weg. Wenn du sie dauerhaft haben willst, schreib sie in eine ~/.sqliterc-Datei — sqlite3 lädt sie dann beim Start automatisch.

CSV in SQLite importieren und exportieren

Die SQLite CLI bringt CSV-Support direkt mit. Wechsle einfach in den CSV-Modus und ziehe dir mit .import eine Datei in eine Tabelle:

sqlite> .mode csv
sqlite> .import authors.csv authors
sqlite> SELECT * FROM authors LIMIT 3;

Falls die Tabelle noch nicht existiert, legt .import sie automatisch an und nimmt die erste Zeile als Spaltennamen. Existiert die Tabelle bereits, wird die erste Zeile als Datensatz behandelt – außer du gibst --skip 1 mit.

Andersherum funktioniert es genauso: Leite die Ausgabe einfach in eine Datei um:

sqlite> .headers on
sqlite> .mode csv
sqlite> .output books.csv
sqlite> SELECT * FROM books;
sqlite> .output stdout

.output filename schreibt alle folgenden Abfrageergebnisse in die angegebene Datei, bis du mit .output stdout wieder zurück auf die Konsole umschaltest. Der Mechanismus funktioniert immer gleich – egal ob du CSV, JSON oder einen reinen Schema-Dump exportierst.

SQL-Dateien ausführen

Sobald es mehr als ein paar Statements werden, lohnt es sich, das SQL in eine Datei auszulagern und von dort zu starten. In der Shell sieht das so aus:

sqlite> .read setup.sql

Oder direkt aus deinem normalen Terminal, ganz ohne die SQLite-Shell zu starten:

$ sqlite3 mydata.db < setup.sql
$ sqlite3 mydata.db "SELECT count(*) FROM books;"

Die zweite Variante führt genau eine Abfrage aus und beendet sich danach – ideal für Shell-Skripte oder schnelle Checks zwischendurch. Bei Bedarf lässt sich das Ganze über das Flag -cmd mit .mode-Einstellungen kombinieren, um die Ausgabe sauber zu formatieren:

$ sqlite3 -header -column mydata.db "SELECT * FROM books;"

Eine unbekannte Datenbank unter die Lupe nehmen

Wenn dir jemand eine .db-Datei in die Hand drückt und du keine Ahnung hast, was drinsteckt, hilft dir folgendes Vorgehen in der sqlite3 Kommandozeile weiter:

$ sqlite3 mystery.db
sqlite> .tables
sqlite> .schema
sqlite> .indexes
sqlite> SELECT count(*) FROM some_table;

.schema ohne Argument gibt dir sämtliche CREATE TABLE-, CREATE INDEX- und CREATE TRIGGER-Anweisungen aus der Datei aus. .indexes listet die Indexe pro Tabelle auf. Fünf Minuten in der SQLite-Shell verraten dir meist mehr über eine Datenbank, als jede README es jemals tun würde.

Wenn du einen vollständigen textuellen Snapshot brauchst, den du an anderer Stelle wieder einspielen kannst, ist .dump dein Werkzeug:

sqlite> .output backup.sql
sqlite> .dump
sqlite> .output stdout

Damit entsteht ein SQL-Skript, das die komplette Datenbank — also Schema und Daten — wiederherstellt, sobald man es erneut durch sqlite3 laufen lässt.

Die Shell verlassen

Drei Wege nach draußen, alle gleichwertig:

sqlite> .exit
sqlite> .quit

Alternativ drückst du Ctrl+D (macOS und Linux) bzw. Ctrl+Z gefolgt von Enter (Windows). Deine Änderungen sind bereits gespeichert — SQLite schreibt jedes Statement direkt fest, sofern du nicht explizit eine Transaktion gestartet hast.

Als Nächstes: GUI-Tools für SQLite

Die CLI ist schnell und lässt sich gut skripten, aber manchmal will man einfach durch Tabellen klicken, Spalten sortieren und Datensätze visuell bearbeiten. Dafür gibt es ein paar richtig gute GUI-Tools für SQLite — und genau die schauen wir uns auf der nächsten Seite an.

Häufig gestellte Fragen

Wie öffne ich eine Datenbank mit der SQLite CLI?

Im Terminal einfach sqlite3 mydata.db aufrufen. Existiert die Datei noch nicht, legt SQLite sie automatisch an, sobald du die erste Tabelle anlegst. Startest du sqlite3 ohne Dateinamen, bekommst du eine temporäre In-Memory-Datenbank, die beim Beenden wieder verschwindet.

Wie verlasse ich die sqlite3-Shell wieder?

.exit oder .quit eintippen und Enter drücken – beides macht dasselbe. Auf den meisten Systemen funktioniert auch Strg+D (unter Windows Strg+Z und dann Enter).

Was sind Dot-Commands in SQLite?

Dot-Commands sind eingebaute Shell-Befehle, die mit einem . beginnen – etwa .tables, .schema, .mode oder .import. Das ist kein SQL, sondern Anweisungen an die CLI selbst. Deshalb brauchen sie kein abschließendes Semikolon und funktionieren ausschließlich innerhalb der sqlite3-Shell.

Wie führe ich eine SQL-Datei in der SQLite CLI aus?

Innerhalb der Shell mit .read filename.sql, oder von außen per Pipe: sqlite3 mydata.db < filename.sql. Beide Varianten arbeiten die Statements der Reihe nach gegen die geöffnete Datenbank ab.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S