====== LU05b – SQL-DDL: Constraints (Einschränkungen) ====== ===== Lernziele ===== Sie lernen in dieser Lektion: * was **Constraints** (Einschränkungen) sind * warum sie in Datenbanken wichtig sind * wie Sie die wichtigsten Constraints direkt beim Erstellen einer Tabelle setzen ===== Was sind Constraints? ===== **Constraints** legen Regeln für Spalten in einer Tabelle fest. Sie sorgen dafür, dass **Daten korrekt, vollständig und widerspruchsfrei** gespeichert werden. **Warum brauchen wir Constraints?** * verhindern fehlerhafte oder unvollständige Einträge * schützen vor doppelten IDs oder leeren Pflichtfeldern * stellen sicher, dass Daten logisch und konsistent bleiben **Beispiele aus der Praxis:** * Jeder Schüler/jede Schülerin braucht eine eindeutige Schülernummer (ID) * Der Name eines Kunden darf nicht leer sein * Die E-Mail-Adresse eines Benutzers soll nur einmal vorkommen Constraints helfen also, **Datenqualität** sicherzustellen. [[ https://www.youtube.com/watch?v=NNrkJUK_euE|Constraints kurz erklärt - 0:56min ]]((Quelle: KnowledgeBits Education/YouTube)) ===== PRIMARY KEY – Eindeutige ID ===== Der Primärschlüssel (//PRIMARY KEY//) identifiziert jeden Datensatz eindeutig. Jede Tabelle kann **nur einen Primärschlüssel** haben. CREATE TABLE student ( student_id INT PRIMARY KEY, name VARCHAR(50) ); **Wirkung:** Keine zwei Datensätze dürfen dieselbe //student_id// haben. Die //student_id// darf ausserdem nicht leer (NULL) sein. ===== AUTO_INCREMENT – Automatisch hochzählen ===== Das Attribut //AUTO_INCREMENT// sorgt dafür, dass bei jedem neuen Datensatz der Wert dieser Spalte automatisch um **1 erhöht** wird. Es wird fast immer zusammen mit dem **Primärschlüssel** verwendet, um automatisch eine **eindeutige ID** zu vergeben – ganz ohne manuelles Eingreifen. Beispiel: CREATE TABLE kunden ( kunden_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL ); Fügt man nun Datensätze ein, vergibt MySQL automatisch fortlaufende Nummern für //kunden_id//: 1, 2, 3, … ===== NOT NULL ===== Mit //NOT NULL// legen Sie fest, dass ein Feld **nicht leer** bleiben darf. CREATE TABLE ort ( plz CHAR(4) NOT NULL, name VARCHAR(50) NOT NULL ); **Wirkung:** Versucht jemand, ohne PLZ oder Name einen Datensatz einzufügen, meldet die Datenbank einen Fehler. ===== UNIQUE – Eindeutige Werte erzwingen ===== Mit dem UNIQUE-Constraint stellen Sie sicher, dass in einer Spalte **kein Wert doppelt vorkommen** darf. Im Gegensatz zum Primärschlüssel (PRIMARY KEY) kann es in einer Tabelle **mehrere UNIQUE-Spalten** geben. So können Sie zum Beispiel sicherstellen, dass keine zwei Benutzer:innen dieselbe E-Mail-Adresse haben. Beispiel: CREATE TABLE benutzer ( benutzer_id INT AUTO_INCREMENT PRIMARY KEY, email VARCHAR(100) UNIQUE, name VARCHAR(50) ); In diesem Beispiel muss jede //email// **eindeutig** sein. Versucht man, eine E-Mail-Adresse zweimal einzutragen, wird ein Fehler ausgegeben. ===== Übersicht ===== ^ Constraint ^ Bedeutung ^ | NOT NULL | Spalte darf nicht leer bleiben | | PRIMARY KEY | Eindeutige ID für jeden Datensatz | | AUTO_INCREMENT | Automatische laufende Nummer für neue Datensätze | | NOT NULL | Spalte darf nicht leer bleiben | | UNIQUE | Wert darf in einer Spalte nur einmal vorkommen | ---- [[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]]