SQLite

Serverlose eingebettete SQL-Datenbank - Zero-Config, einzelne Datei, ideal fur Mobile Apps und Prototypen

TL;DR

Was: Eine leichtgewichtige, serverlose, eigenständige SQL-Datenbank-Engine.

Warum: Keine Konfiguration, einzelne Datei, perfekt für eingebettete und lokale Speicherung.

Quick Start

Installieren:

macOS (vorinstalliert) / Linux:

brew install sqlite  # macOS
sudo apt install sqlite3  # Ubuntu

Datenbank erstellen:

sqlite3 myapp.db

Tabelle erstellen:

CREATE TABLE users (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name TEXT NOT NULL,
  email TEXT UNIQUE,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

Einfügen und abfragen:

INSERT INTO users (name, email) VALUES ('John', '[email protected]');
SELECT * FROM users;
.exit

Cheatsheet

BefehlBeschreibung
sqlite3 file.dbDatenbank öffnen/erstellen
.tablesTabellen auflisten
.schema tableTabellenschema anzeigen
.headers onSpaltenüberschriften anzeigen
.mode columnSpalten-Ausgabemodus
.exitSQLite beenden
.dumpDatenbank exportieren
.read file.sqlSQL-Datei ausführen

Gotchas

Type affinity

-- SQLite uses dynamic typing
-- These are all valid:
CREATE TABLE test (
  id INTEGER,      -- INT, BIGINT, etc. → INTEGER
  name TEXT,       -- VARCHAR, CHAR, etc. → TEXT
  price REAL,      -- FLOAT, DOUBLE → REAL
  data BLOB        -- Binary data
);

Auto-increment

-- INTEGER PRIMARY KEY auto-increments automatically
CREATE TABLE users (
  id INTEGER PRIMARY KEY,  -- Auto-increments
  name TEXT
);

-- Or explicitly
CREATE TABLE items (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name TEXT
);

Date/time functions

SELECT datetime('now');
SELECT date('now', '-1 day');
SELECT strftime('%Y-%m-%d', 'now');

CREATE TABLE events (
  created_at DATETIME DEFAULT (datetime('now'))
);

Backup database

# Copy the file
cp myapp.db myapp_backup.db

# Or use .dump
sqlite3 myapp.db .dump > backup.sql

Use in code

# Python
import sqlite3
conn = sqlite3.connect('myapp.db')
cursor = conn.execute('SELECT * FROM users')
// Node.js with better-sqlite3
const Database = require('better-sqlite3');
const db = new Database('myapp.db');
const rows = db.prepare('SELECT * FROM users').all();

Next Steps