# sqlite3 — Die SQLite-Kommandozeile

> Praxis-Guide zu sqlite3 — der serverlosen, dateibasierten SQL-Datenbank: Dot-Commands, Import/Export, Backup und JSON von der Kommandozeile.

Source: https://www.jpkc.com/db/cheatsheets/build-languages/sqlite3/

<!-- PROSE:intro -->
sqlite3 ist die offizielle Kommandozeile für SQLite – eine serverlose, dateibasierte SQL-Datenbank, die eine ganze Datenbank in einer einzigen Datei ablegt. Du brauchst keinen Server, keine Konfiguration und keinen laufenden Dienst: Du öffnest einfach eine `.db`-Datei und legst los. Neben normalem SQL bietet das Tool sogenannte Dot-Commands wie `.tables`, `.schema` oder `.mode`, mit denen du die Datenbank inspizierst, das Ausgabeformat steuerst und Daten importierst oder exportierst. Dieser Guide zeigt dir die wichtigsten Befehle für Entwicklung, Tests und eingebettete Anwendungen.
<!-- PROSE:intro:end -->

## Öffnen & Anlegen

`sqlite3 <database>` — Öffnet eine Datenbank (legt sie an, falls sie nicht existiert).

```bash
sqlite3 myapp.db
```

`sqlite3 :memory:` — Legt eine reine In-Memory-Datenbank an.

```bash
sqlite3 :memory:
```

`sqlite3 <database> '<query>'` — Führt eine Abfrage aus und beendet sich.

```bash
sqlite3 myapp.db 'SELECT count(*) FROM users;'
```

`sqlite3 <database> < <file>` — Führt SQL aus einer Datei aus.

```bash
sqlite3 myapp.db < schema.sql
```

## Dot-Commands — Information

`.databases` — Listet die angehängten Datenbanken und ihre Dateipfade auf.

```bash
.databases
```

`.tables` — Listet alle Tabellen der aktuellen Datenbank auf.

```bash
.tables
```

`.tables <pattern>` — Listet Tabellen auf, die zu einem Muster passen.

```bash
.tables user%
```

`.schema <table>` — Zeigt das CREATE-Statement einer Tabelle an.

```bash
.schema users
```

`.schema` — Zeigt die CREATE-Statements aller Tabellen an.

```bash
.schema
```

`.indexes <table>` — Zeigt die Indizes einer Tabelle an.

```bash
.indexes users
```

## Dot-Commands — Ausgabe

`.mode <mode>` — Setzt das Ausgabeformat (column, csv, json, table, line usw.).

```bash
.mode table
```

`.headers on` — Blendet die Spaltenüberschriften in der Ausgabe ein.

```bash
.headers on
```

`.output <file>` — Leitet die Abfrage-Ausgabe in eine Datei um.

```bash
.output results.txt
```

`.output` — Setzt die Ausgabe wieder auf stdout zurück.

```bash
.output
```

`.once <file>` — Leitet nur die nächste Abfrage-Ausgabe in eine Datei um (einmalig).

```bash
.once export.csv
```

## Import & Export

Importiert CSV-Daten in eine Tabelle.

```bash
.mode csv
.import <file> <table>
```

Exportiert eine Tabelle als CSV.

```bash
.mode csv
.headers on
.output <file>
SELECT * FROM <table>;
```

`.dump` — Exportiert die gesamte Datenbank als SQL-Statements.

```bash
.output backup.sql
.dump
```

`.dump <table>` — Exportiert eine bestimmte Tabelle als SQL.

```bash
.dump users
```

`.read <file>` — Führt SQL-Befehle aus einer Datei aus.

```bash
.read migrations/001.sql
```

## Backup & Werkzeuge

`.backup <file>` — Erstellt ein konsistentes Backup der Datenbank.

```bash
.backup /tmp/myapp-backup.db
```

`.clone <file>` — Klont die aktuelle Datenbank in eine neue Datei.

```bash
.clone myapp-copy.db
```

`VACUUM;` — Komprimiert die Datenbankdatei (gibt freien Speicher zurück).

```bash
VACUUM;
```

`PRAGMA integrity_check;` — Prüft die Integrität der Datenbank.

```bash
PRAGMA integrity_check;
```

`PRAGMA table_info(<table>);` — Zeigt die Spaltendetails einer Tabelle an.

```bash
PRAGMA table_info(users);
```

`.quit` — Beendet sqlite3.

```bash
.quit
```

## Typische Muster

`sqlite3 <db> -header -csv '<query>'` — CSV-Export als Einzeiler.

```bash
sqlite3 myapp.db -header -csv 'SELECT * FROM users' > users.csv
```

`sqlite3 <db> -json '<query>'` — JSON-Export als Einzeiler.

```bash
sqlite3 myapp.db -json 'SELECT * FROM users'
```

`sqlite3 <db> '.dump' | sqlite3 <newdb>` — Datenbank per Dump und Restore klonen.

```bash
sqlite3 prod.db '.dump' | sqlite3 dev.db
```

`sqlite3 <db> 'SELECT count(*) FROM <table>;'` — Schnelle Zeilenanzahl von der Kommandozeile.

```bash
sqlite3 myapp.db 'SELECT count(*) FROM users;'
```

<!-- PROSE:outro -->
## Fazit

sqlite3 packt eine vollständige SQL-Datenbank in eine einzige Datei und die Kommandozeile gleich dazu – ideal für Entwicklung, Tests, kleine Tools und eingebettete Anwendungen. Die Dot-Commands nehmen dir die Routinearbeit ab: Mit `.schema` und `.tables` verschaffst du dir Überblick, mit `.mode` und `.output` steuerst du Export-Formate, und mit `.dump` oder `.backup` sicherst du den kompletten Bestand. Sei vorsichtig bei schreibenden Befehlen: Ein `DROP` oder ein `DELETE` ohne `WHERE` ist sofort und unwiderruflich. Für konsistente Sicherungen nimm `.backup` statt eine geöffnete Datei zu kopieren, und achte auf die Dateirechte der `.db`-Datei – wer sie lesen kann, liest deine gesamten Daten.

## Weiterführende Links

- [Command Line Shell For SQLite](https://sqlite.org/cli.html) – offizielle Dokumentation der sqlite3-Kommandozeile (englisch)
- [SQLite – Startseite](https://sqlite.org/) – Projektseite mit Doku, Downloads und Format-Spezifikation (englisch)
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [artisan](https://www.jpkc.com/db/cheatsheets/build-languages/artisan/) – Kommandozeilen-Werkzeug des Laravel-Frameworks
- [cargo](https://www.jpkc.com/db/cheatsheets/build-languages/cargo/) – Paketmanager und Build-Tool für Rust
- [composer](https://www.jpkc.com/db/cheatsheets/build-languages/composer/) – Abhängigkeitsverwaltung für PHP-Projekte

