Zwei Kinokarten für denselben Platz
Ein kleines Kino verwaltet seine Filme in einer Tabellenkalkulation. Jemand tippt den Film „Sturmflut“ zweimal ein, einmal mit 112 und einmal mit 120 Minuten.
Welche Zeile stimmt? Niemand weiß es. Eine Datenbank verhindert so etwas, wenn die Tabelle gut entworfen ist.
Am Ende dieser Lektion
Notiz
Ich kann eine Tabelle mit einem Primärschlüssel entwerfen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Tabelle | Zeilen und Spalten für eine Art von Dingen | |
| Datensatz | eine Zeile, also alles über ein einzelnes Ding | |
| Datentyp | die Art von Wert, die eine Spalte aufnimmt | INT |
| Primärschlüssel | die Spalte, die jede Zeile eindeutig macht | id |
| Einschränkung | eine Regel, die die Datenbank bei jeder Änderung prüft | NOT NULL |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine Tabelle hält eine Art von Dingen
Eine relationale Datenbank speichert alles in Tabellen. Eine Tabelle hält eine Art von Dingen: Filme, Kunden oder Bestellungen.
Jede Spalte ist eine Eigenschaft, etwa der Titel. Jede Zeile ist ein Datensatz. Für jede Spalte legst du einen Datentyp fest. In eine Zahlenspalte nimmt die Datenbank keinen Text auf.
Beispiel: den Typ für jede Spalte wählen
| Was gespeichert wird | Typ | Warum |
|---|---|---|
| Länge eines Films in Minuten | INT | Nur ganze Zahlen |
| Preis einer Karte in Euro | DECIMAL(5,2) | Cent genau, kein Rundungsfehler |
| Titel eines Films | VARCHAR(60) | Text bis 60 Zeichen |
| Datum der Premiere | DATE | Die Datenbank kann Tage zählen |
| Läuft der Film noch | BOOLEAN | Nur ja oder nein |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Bevor du anfängst
Notiz
Drück oben in der Leiste auf Lab starten. Warte, bis beide Dienste laufen, und öffne das Terminal. Die zwei ersten Runs richten die Anmeldung ein und gelten für die ganze Lektion. Die Meldungen des Servers sind englisch.
Das Zertifikat des Servers annehmen
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnfHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Abkürzung für die Datenbank shop
alias sql='mariadb -h db -u student -pstudent shop -t -e'Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Alle Tabellen der Datenbank zeigen
sql "SHOW TABLES"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Primärschlüssel macht jede Zeile eindeutig
Ein Primärschlüssel ist eine Spalte, deren Wert in jeder Zeile anders ist. Er ist nie leer. Mit ihm findest du genau einen Datensatz wieder.
Meist ist er eine Nummer, die die Datenbank selbst weiterzählt. Versuchst du, einen Wert zweimal einzutragen, lehnt die Datenbank die zweite Zeile ab.
Probier es: eine doppelte Nummer
-- Der Schlüssel id ist in jeder Zeile anders. Ein zweites Sturmflut mit id 1 wird abgelehnt.
INSERT INTO filme VALUES (1, 'Sturmflut 2', 'Drama', 120, 12);
-- Ändere die 1 in eine 5 und starte noch einmal. Danach nimmt die Tabelle die Zeile an.
Ein häufiger Fehler
Warnung
Viele glauben, der Titel oder der Name sei ein guter Primärschlüssel. Titel wiederholen sich, und Namen ändern sich. Nimm eine eigene Nummer, die sich nie ändert. Der Titel bleibt als normale Spalte daneben.
Kunden zählen und ihre Nachnamen
sql "SELECT COUNT(*) AS kunden, COUNT(DISTINCT last_name) AS nachnamen, COUNT(DISTINCT email) AS adressen FROM customers"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Einschränkungen schützen die Daten
Eine Einschränkung ist eine Regel, die die Datenbank bei jeder Änderung prüft. NOT NULL verbietet einen leeren Wert. UNIQUE verbietet zwei gleiche Werte.
Ein Primärschlüssel ist beides zugleich. AUTO_INCREMENT lässt die Datenbank die nächste Nummer selbst vergeben.
Baue deine erste eigene Tabelle
In diesem Lab darfst du jede Datenbank anlegen, deren Name mit student_ beginnt. Du legst student_kino an. Die Datenbank shop bleibt, wie sie ist.
Starte die Runs der Reihe nach. Der Run, der mit einem Fehler endet, gehört zur Lektion.
Eine eigene Datenbank anlegen
sql "CREATE DATABASE IF NOT EXISTS student_kino"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Abkürzung dafür
alias kino='mariadb -h db -u student -pstudent student_kino -t -e'Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Von vorn beginnen: die Tabelle löschen
kino "DROP TABLE IF EXISTS filme"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Tabelle der Filme anlegen
kino "CREATE TABLE filme (id INT AUTO_INCREMENT PRIMARY KEY, titel VARCHAR(60) NOT NULL, minuten INT NOT NULL, ab_alter INT NOT NULL)"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Zwei Filme eintragen
kino "INSERT INTO filme (titel, minuten, ab_alter) VALUES ('Sturmflut', 112, 12), ('Hinterhof', 95, 6)"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Tabelle lesen
kino "SELECT * FROM filme"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Noch einmal die Nummer 1 eintragen
kino "INSERT INTO filme (id, titel, minuten, ab_alter) VALUES (1, 'Nachtzug', 112, 12)"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.