Primärschlüssel und Eindeutigkeit
Verstehen Sie Primärschlüssel, Surrogat- und natürliche Schlüssel sowie zusammengesetzte Schlüssel — und warum jede Zeile eine vertrauenswürdige eindeutige Kennung benötigt.
Primärschlüssel und Eindeutigkeit ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum jede Zeile eine eindeutige ID benötigt
Um eine bestimmte Zeile sicher zu aktualisieren oder zu löschen, müssen Sie sie eindeutig bestimmen können.
- Es kann zwei Benutzer namens "Alice Adams" geben
- Aber zwei Benutzer mit
id = 42darf es NICHT geben - Der eindeutige Bezeichner wird Primärschlüssel genannt
Einen Primärschlüssel deklarieren
Sie kennzeichnen eine Spalte beim Erstellen der Tabelle als Primärschlüssel:
CREATE TABLE products (
id BIGSERIAL PRIMARY KEY,
sku VARCHAR(50) NOT NULL,
name VARCHAR(200) NOT NULL,
price NUMERIC(10,2) NOT NULL
);PRIMARY KEY = NOT NULL + UNIQUE
Ein PRIMARY KEY erzwingt automatisch:
- NOT NULL – Primärschlüsselwerte dürfen nicht fehlen
- UNIQUE – keine zwei Zeilen dürfen denselben Primärschlüsselwert haben
Die Datenbank erstellt außerdem einen eindeutigen Index für den Primärschlüssel, sodass Nachschlagen per ID schnell ist.
Surrogatschlüssel vs. natürliche Schlüssel
Für den Primärschlüssel haben Sie zwei Möglichkeiten:
- Surrogat – eine künstliche ID, die von der Datenbank erzeugt wird (BIGSERIAL, UUID). In modernen Apps am häufigsten verwendet.
- Natürlich – ein Bezeichner aus der realen Welt (E-Mail-Adresse, ISBN). Riskant: Menschen ändern ihre E-Mail-Adressen.
Bewährte Vorgehensweise: Verwenden Sie eine Surrogat-ID und setzen Sie einen UNIQUE-Constraint auf den natürlichen Schlüssel.
BIGSERIAL: automatisch inkrementierte Ganzzahlen
In PostgreSQL erstellt BIGSERIAL eine automatisch inkrementierte 64-Bit-Spalte, die von einer Sequenz unterstützt wird.
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
total NUMERIC(10,2) NOT NULL
);
-- You omit id on insert and the DB fills it in:
INSERT INTO orders (user_id, total) VALUES (7, 99.50);UUID-Primärschlüssel
Eine Alternative ist eine 128-Bit-UUID, die nützlich ist, wenn IDs systemübergreifend eindeutig oder clientseitig erzeugt werden müssen.
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE sessions (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
user_id BIGINT NOT NULL,
ip INET
);Zusammengesetzte Primärschlüssel
Manchmal ist der natürliche Bezeichner eine Kombination aus mehreren Spalten:
CREATE TABLE order_items (
order_id BIGINT NOT NULL,
product_id BIGINT NOT NULL,
quantity INT NOT NULL,
PRIMARY KEY (order_id, product_id)
);
-- The pair (order_id, product_id) must be unique
-- A product can appear at most once per orderUNIQUE-Constraints vs. Primärschlüssel
Sie können andere Spalten als eindeutig deklarieren, ohne sie zum Primärschlüssel zu machen:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
username VARCHAR(50) UNIQUE
);
-- INSERT below fails on the second row:
INSERT INTO users (email, username) VALUES ('a@x.com', 'alice');
INSERT INTO users (email, username) VALUES ('a@x.com', 'bob'); -- ERRORWas bei einem doppelten INSERT passiert
Wenn Sie versuchen, einen doppelten Primärschlüssel einzufügen, weist die Datenbank die gesamte Anweisung zurück:
ERROR: duplicate key value violates unique constraint "users_pkey" DETAIL: Key (id)=(42) already exists.
Das ist gut – es verhindert eine unbemerkte Beschädigung der Daten.
Das Nachschlagen von Zeilen per Primärschlüssel ist schnell
Der eindeutige Index auf dem Primärschlüssel ermöglicht Nachschlagen in O(log n), selbst bei Milliarden von Zeilen.
-- Index Scan using users_pkey on users (cost=0.43..8.45 rows=1)
SELECT email FROM users WHERE id = 42;IDs nicht wiederverwenden
Verwenden Sie den Primärschlüssel auch dann NICHT wieder, wenn Sie eine Zeile löschen. Andere Tabellen oder externe Systeme könnten weiterhin darauf verweisen. Lassen Sie die Sequenz weiter hochzählen – IDs sind günstig.
Zusammenfassung
Primärschlüssel geben jeder Zeile einen stabilen, eindeutigen Bezeichner.
- Bevorzugen Sie Surrogatschlüssel (BIGSERIAL oder UUID)
- Verwenden Sie UNIQUE für natürliche Schlüssel, die nicht doppelt vorkommen dürfen
- Zusammengesetzte Primärschlüssel bilden ab: "Dieses Paar muss eindeutig sein"
Kurzer Test
Was wird durch einen PRIMARY KEY implizit erzwungen?
Häufig gestellte Fragen
Ist die Lektion „Primärschlüssel und Eindeutigkeit“ kostenlos?
Ja — der vollständige Text von „Primärschlüssel und Eindeutigkeit“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Primärschlüssel und Eindeutigkeit“?
Verstehen Sie Primärschlüssel, Surrogat- und natürliche Schlüssel sowie zusammengesetzte Schlüssel — und warum jede Zeile eine vertrauenswürdige eindeutige Kennung benötigt. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Academy zu starten?
Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Primärschlüssel und Eindeutigkeit“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?
Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Was ein RDBMS ist und warum Tabellen wichtig sind
- Primärschlüssel und Eindeutigkeit
- NULL: Der dritte Wahrheitswert
- Überblick über Datentypen: INT VARCHAR DATE BOOLEAN