INSERT ·
UPDATE ·
DELETE ·
Upsert ·
Transaktionen ·
Sicherheit
Diese Befehle ermöglichen das Einfügen, Aktualisieren und Löschen von Daten in SQL-Datenbanken. Sie sind essenziell für jede Anwendung, die Daten persistiert.
INSERT fügt neue Datensätze in eine Tabelle ein. Sie können entweder alle Spalten oder nur bestimmte Spalten mit Werten versehen.
| Variante | Beschreibung |
|---|---|
| INSERT INTO tabelle (spalten) VALUES (...) | Einfügen mit expliziten Spalten |
| INSERT INTO tabelle VALUES (...) | Alle Spalten in der definierten Reihenfolge |
| INSERT INTO tabelle (spalten) SELECT ... | Einfügen aus SELECT-Abfrage |
| INSERT INTO tabelle DEFAULT VALUES | Einfügen mit Standardwerten |
| INSERT IGNORE ... | MySQL: Duplikate ignorieren |
| INSERT ... ON CONFLICT | PostgreSQL: Bei Konflikt anders handeln |
INSERT mit vielen Datensätzen kann INSERT INTO ... VALUES (...), (...), ... die Performance erheblich verbessern, da nur ein Befehl an die Datenbank gesendet wird.
UPDATE ändert vorhandene Datensätze. Die WHERE-Klausel ist entscheidend – ohne sie werden alle Datensätze aktualisiert!
| Option | Beschreibung |
|---|---|
| SET spalte = wert | Einzelne Spalte setzen |
| SET spalte1 = wert1, spalte2 = wert2 | Mehrere Spalten gleichzeitig |
| SET spalte = spalte + 1 | Wert basierend auf aktuellem Wert ändern |
| WHERE EXISTS (SELECT ...) | Bedingte Aktualisierung |
| UPDATE ... ORDER BY ... LIMIT | MySQL: Nur bestimmte Zeilen |
| UPDATE ... RETURNING | PostgreSQL: Geänderte Werte zurückgeben |
WHERE-Klausel bei UPDATE! UPDATE tabelle SET spalte = wert; aktualisiert alle Zeilen der Tabelle – ein häufiger und gefährlicher Fehler.
DELETE entfernt Datensätze aus einer Tabelle. Ohne WHERE-Klausel werden alle Datensätze gelöscht. Für das vollständige Leeren einer Tabelle ist TRUNCATE oft effizienter.
| Merkmal | DELETE | TRUNCATE |
|---|---|---|
| Geschwindigkeit | Langsamer (loggt jede Zeile) | Sehr schnell (nur Metadaten) |
| WHERE-Klausel | Ja | Nein |
| Transaktionssicher | Ja | Ja |
| Auto-Increment-Reset | Nein | Ja (meistens) |
| Trigger | Ja | Nein |
| Logging | Jede Zeile | Nur Tabellenstruktur |
DELETE ohne WHERE löscht alle Zeilen einer Tabelle! Verwenden Sie TRUNCATE für eine vollständige Tabellenleerung – es ist schneller und kann in Transaktionen zurückgerollt werden.
Upsert kombiniert INSERT und UPDATE: Wenn der Datensatz bereits existiert, wird er aktualisiert, andernfalls eingefügt. Die Syntax variiert je nach Datenbank.
ON CONFLICT ist besonders flexibel.
Transaktionen fassen mehrere Datenbankoperationen zu einer atomaren Einheit zusammen. Entweder werden alle Änderungen übernommen (COMMIT) oder keine (ROLLBACK).
ROLLBACK-Plan für Fehlerfälle haben. Viele ORMs und Frameworks übernehmen die Transaktionsverwaltung automatisch.
Sicherheit ist bei INSERT, UPDATE und DELETE besonders wichtig. Die folgenden Best Practices schützen Ihre Daten und Ihre Anwendung.
| Praxis | Beschreibung |
|---|---|
| Prepared Statements | Immer Parameter-Bindings verwenden – nie Benutzereingaben direkt in SQL einbetten |
| Immer WHERE | Niemals UPDATE oder DELETE ohne WHERE-Klausel ausführen |
| Transaktionen | Mehrere zusammenhängende Änderungen in Transaktionen ausführen |
| Backups | Regelmäßige Backups vor größeren Datenänderungen |
| Berechtigungen | Nur minimale Rechte für die Anwendungsdatenbank (z.B. kein DROP) |
| Constraints | NOT NULL, UNIQUE, FOREIGN KEY – soweit wie möglich nutzen |
| Validierung | Daten vor dem INSERT/UPDATE auf korrekte Formate prüfen |
INSERT
UPDATE
DELETE
Upsert
COMMIT
Prepared
INSERT INTO kunden (name, email) VALUES (?, ?); ·
UPDATE produkte SET preis = preis * 1.1 WHERE kategorie = 'Elektronik';