SQLite Datenbank Einfuehrung
SQLite: Die eingebettete Datenbank für Einsteiger
SQLite ist die meistverbreitete Datenbank der Welt. Sie läuft ohne Server direkt in Ihrer Anwendung und speichert alles in einer einzigen Datei. Perfekt für kleine bis mittlere Projekte.
Was ist SQLite?
SQLite ist eine relationale Datenbank, die keinen separaten Server benötigt. Die gesamte Datenbank liegt in einer einzigen Datei.
Wann SQLite nutzen?
- Lokale Anwendungen und Apps
- Prototypen und Entwicklung
- Kleine bis mittlere Websites
- Embedded Systems und IoT
- Datei-basierte Datenablage
Wann nicht?
- Hohe Schreiblast (viele gleichzeitige Schreibzugriffe)
- Große Datenmengen (> 1 TB)
- Verteilte Systeme
- Client-Server-Architektur mit vielen Nutzern
Installation
# Ubuntu/Debian sudo apt install sqlite3 # macOS (meist vorinstalliert) sqlite3 --version # Windows: Download von sqlite.org
Erste Schritte
Datenbank erstellen/öffnen
# Neue Datenbank erstellen (oder vorhandene öffnen) sqlite3 meine_datenbank.db # SQLite-Shell sqlite> .help # Hilfe anzeigen sqlite> .databases # Datenbanken anzeigen sqlite> .tables # Tabellen anzeigen sqlite> .schema # Schema anzeigen sqlite> .quit # Beenden
Tabellen erstellen
-- Benutzer-Tabelle
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
email TEXT NOT NULL UNIQUE,
password_hash TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Artikel-Tabelle mit Fremdschlüssel
CREATE TABLE articles (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
content TEXT,
user_id INTEGER NOT NULL,
published BOOLEAN DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
CRUD-Operationen
INSERT - Daten einfügen
-- Einzelner Datensatz
INSERT INTO users (username, email, password_hash)
VALUES ('max', 'max@example.com', 'hash123');
-- Mehrere Datensätze
INSERT INTO users (username, email, password_hash) VALUES
('anna', 'anna@example.com', 'hash456'),
('tom', 'tom@example.com', 'hash789');
SELECT - Daten abfragen
-- Alle Datensätze SELECT * FROM users; -- Bestimmte Spalten SELECT username, email FROM users; -- Mit Bedingung SELECT * FROM users WHERE username = 'max'; -- Mit LIKE (Suche) SELECT * FROM users WHERE email LIKE '%@example.com'; -- Sortiert SELECT * FROM users ORDER BY created_at DESC; -- Limitiert SELECT * FROM users LIMIT 10 OFFSET 20; -- Mit JOIN SELECT articles.title, users.username FROM articles JOIN users ON articles.user_id = users.id WHERE articles.published = 1;
UPDATE - Daten aktualisieren
UPDATE users SET email = 'neuemail@example.com' WHERE username = 'max';
DELETE - Daten löschen
DELETE FROM users WHERE id = 5;
SQLite-Datentypen
| Typ | Beschreibung |
|---|---|
INTEGER |
Ganzzahl |
REAL |
Fließkommazahl |
TEXT |
Zeichenkette (UTF-8) |
BLOB |
Binärdaten |
NULL |
Kein Wert |
Indizes für Performance
-- Index erstellen CREATE INDEX idx_users_email ON users(email); -- Zusammengesetzter Index CREATE INDEX idx_articles_user_date ON articles(user_id, created_at); -- Unique Index CREATE UNIQUE INDEX idx_users_username ON users(username); -- Index löschen DROP INDEX idx_users_email;
SQLite mit Python
import sqlite3
# Verbindung herstellen
conn = sqlite3.connect('app.db')
cursor = conn.cursor()
# Tabelle erstellen
cursor.execute('''
CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
price REAL NOT NULL
)
''')
# Daten einfügen
cursor.execute(
'INSERT INTO products (name, price) VALUES (?, ?)',
('Laptop', 999.99)
)
# Mehrere Datensätze
products = [
('Maus', 29.99),
('Tastatur', 79.99),
('Monitor', 299.99)
]
cursor.executemany(
'INSERT INTO products (name, price) VALUES (?, ?)',
products
)
# Daten abfragen
cursor.execute('SELECT * FROM products WHERE price < ?', (100,))
for row in cursor.fetchall():
print(row)
# Änderungen speichern und Verbindung schließen
conn.commit()
conn.close()
SQLite mit PHP
<?php
// Verbindung mit PDO
$db = new PDO('sqlite:app.db');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Tabelle erstellen
$db->exec('
CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
price REAL NOT NULL
)
');
// Daten einfügen (Prepared Statement)
$stmt = $db->prepare('INSERT INTO products (name, price) VALUES (:name, :price)');
$stmt->execute([':name' => 'Laptop', ':price' => 999.99]);
// Daten abfragen
$stmt = $db->query('SELECT * FROM products');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['name'] . ': ' . $row['price'] . "\n";
}
Backup und Export
# Datenbank als SQL exportieren sqlite3 app.db .dump > backup.sql # SQL-Dump importieren sqlite3 neue_db.db < backup.sql # Datenbank kopieren cp app.db backup_app.db
💡 Tipp:
SQLite ist perfekt für Entwicklung und Tests. Für Produktion mit hoher Last wechseln Sie zu PostgreSQL oder MySQL.
Nützliche Tools
- DB Browser for SQLite: GUI zum Verwalten
- SQLiteStudio: Kostenloser Editor
- VS Code SQLite Extension: IDE-Integration