Was du machst
Eine Datenbank speichert Informationen in Tabellen. Eine Tabelle ist wie eine Tabellenkalkulation: Jede Spalte ist eine Art von Information, und jede Zeile ist eine Sache, zum Beispiel ein Kunde.
SQL ist die Sprache, mit der du mit einer Datenbank sprichst. In dieser Lektion fügst du einem kleinen Online-Shop eine neue Tabelle hinzu, legst Zeilen darin ab, stellst Fragen dazu, änderst eine Zeile und entfernst eine Zeile.
Bevor du anfängst
Notiz
Klicke oben in der Leiste dieser Lektion auf Lab starten und warte, bis dort steht, dass es läuft. Der erste Start dauert etwas länger, weil dabei die Shop-Datenbank angelegt wird. Jede Schaltfläche Ausführen unten tippt ihren Befehl ins Terminal deines Labs, einen nach dem anderen in derselben Sitzung. Wenn du zuschauen oder eigene Befehle tippen willst, klicke in der Leiste auf Terminal öffnen (neuer Tab).
1. Sag dem Terminal, wie es sich anmeldet
MySQL erstellt sein eigenes Sicherheitszertifikat. Der erste Befehl sagt deshalb dem Datenbank-Client, dass er es akzeptieren soll. Die Verbindung bleibt privat. Der zweite Befehl legt einen kurzen Namen, sql, für den langen Befehl an, der sich an der Datenbank shop anmeldet und eine SQL-Anweisung ausführt. Danach tippst du nur noch sql und die Anweisung in Anführungszeichen.
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.
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.
2. Sieh dir die vorhandenen Tabellen an
Der Shop hat schon Tabellen. SHOW TABLES listet sie auf. Jede enthält eine andere Art von Information: customers sind die Leute, die kaufen, products ist das, was sie kaufen.
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.
3. Sieh in eine Tabelle hinein
DESCRIBE zeigt die Spalten einer Tabelle: ihren Namen, ihren Typ und mehr. Sieh dir die Spalte Key an. PRI heißt Primärschlüssel. Ein Primärschlüssel ist eine Spalte, deren Wert in jeder Zeile anders ist. Er benennt also genau eine Zeile und keine andere. Hier ist das id.
sql "DESCRIBE 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.
sql "DESCRIBE products"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
4. Lege eine neue Tabelle an
Jetzt legst du deine eigene Tabelle wishlist an: Welcher Kunde möchte welches Produkt? CREATE TABLE legt sie an, und der Teil in Klammern listet ihre Spalten auf.
id INT AUTO_INCREMENT PRIMARY KEY: eine ganze Zahl, die MySQL für jede neue Zeile hochzählt. Sie ist der Primärschlüssel.customer_idundproduct_id: welcher Kunde und welches Produkt. Sie enthalten dieideiner Zeile in einer anderen Tabelle.priority: wie sehr es gewünscht wird, von 1 (sehr) bis 5. Sie ist 3, wenn du nichts sagst.UNIQUE KEY: Derselbe Kunde und dasselbe Produkt dürfen nicht zweimal in der Tabelle stehen.FOREIGN KEY: Die ids müssen incustomersundproductsexistieren. Du kannst dir also kein Produkt wünschen, das es im Shop nicht gibt.
Die Anweisung ist lang, aber du führst sie nur einmal aus.
sql "CREATE TABLE wishlist (id INT AUTO_INCREMENT PRIMARY KEY, customer_id INT NOT NULL, product_id INT NOT NULL, priority INT NOT NULL DEFAULT 3, UNIQUE KEY customer_product (customer_id, product_id), FOREIGN KEY (customer_id) REFERENCES customers(id), FOREIGN KEY (product_id) REFERENCES products(id))"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
sql "DESCRIBE wishlist"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
5. Lege Zeilen in der Tabelle ab
INSERT INTO fügt Zeilen hinzu. Zuerst kommen die Tabelle und ihre Spalten, dann VALUES und eine Klammer für jede Zeile. Eine id gibst du nicht an: MySQL zählt für dich. Das hier fügt drei Zeilen hinzu: Kunde 1 will Produkt 1 und Produkt 5, und Kunde 2 will Produkt 5. SELECT * zeigt dann alle Spalten jeder Zeile.
sql "INSERT INTO wishlist (customer_id, product_id, priority) VALUES (1, 1, 3), (1, 5, 2), (2, 5, 1)"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
sql "SELECT * FROM wishlist"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
6. Der Unique Key sagt nein
Kunde 1 will Produkt 1 schon. Versuche, dasselbe Paar noch einmal hinzuzufügen. MySQL lehnt es mit einem Fehler ab, wegen des UNIQUE KEY aus Schritt 4. Dieser Fehler ist nicht dein Fehler: Er zeigt, wie die Tabelle ihre eigenen Daten schützt. Es wurde nichts hinzugefügt.
sql "INSERT INTO wishlist (customer_id, product_id, priority) VALUES (1, 1, 1)"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
sql "SELECT * FROM wishlist"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Der Foreign Key sagt auch nein
Notiz
Probiere sql "INSERT INTO wishlist (customer_id, product_id) VALUES (1, 999)" im Terminal aus. Es gibt kein Produkt 999, deshalb lehnt der FOREIGN KEY es ab.
7. Stelle eine einfache Frage
SELECT stellt eine Frage. FROM sagt, welche Tabelle. WHERE behält nur die Zeilen, die passen, und ORDER BY bringt sie in eine Reihenfolge. Diese Abfrage zeigt, was Kunde 1 will, das Begehrteste zuerst.
sql "SELECT * FROM wishlist WHERE customer_id = 1 ORDER BY priority"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
sql "SELECT name, price FROM products WHERE price > 50 ORDER BY price DESC"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
8. Verbinde zwei Tabellen
Die Wunschliste enthält nur Zahlen. Die Produktnamen stehen in products. Ein Join legt zwei Tabellen nebeneinander. JOIN products ON products.id = wishlist.product_id heißt: Suche zu jeder Zeile der Wunschliste das Produkt, dessen id in product_id steht. Jetzt kannst du es lesen.
sql "SELECT wishlist.id, products.name, products.price, wishlist.priority FROM wishlist JOIN products ON products.id = wishlist.product_id"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
9. Verbinde drei Tabellen
Du kannst noch einmal verbinden, um den Namen des Kunden hinzuzufügen. Dieselbe Idee, ein JOIN mehr.
sql "SELECT customers.first_name, products.name, wishlist.priority FROM wishlist JOIN customers ON customers.id = wishlist.customer_id JOIN products ON products.id = wishlist.product_id ORDER BY customers.first_name"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
10. Ändere eine Zeile
UPDATE ändert Zeilen. SET nennt den neuen Wert. WHERE id = 2 sagt, welche Zeile. Kunde 1 will Produkt 5 jetzt am meisten, deshalb wird seine Priorität 1. Prüfe dann mit einem SELECT, dass sich die Zeile wirklich geändert hat.
sql "UPDATE wishlist SET priority = 1 WHERE id = 2"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
sql "SELECT * FROM wishlist WHERE id = 2"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Vergiss nie WHERE
Warnung
Man denkt leicht, UPDATE und DELETE ändern nur die Zeile, die du meinst. Ohne WHERE ändern sie jede Zeile der Tabelle. Schreibe das WHERE immer zuerst und prüfe vorher und nachher mit einem SELECT.
11. Entferne eine Zeile
DELETE FROM entfernt Zeilen. Auch hier sagt WHERE, welche. Kunde 2 hat es sich anders überlegt, entferne also Zeile 3. Sieh dir dann die Tabelle an: Zeile 3 ist weg, und die anderen Zeilen sind noch da.
sql "DELETE FROM wishlist WHERE id = 3"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
sql "SELECT * FROM wishlist"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
12. Zähle, was übrig ist
COUNT(*) zählt Zeilen. Frage nach Zeile 3, und die Antwort ist 0. Das beweist, dass die Zeile weg ist.
sql "SELECT COUNT(*) AS rows_found FROM wishlist WHERE id = 3"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
13. Sieh es in phpMyAdmin
Klicke in der Lab-Leiste auf phpMyAdmin, um es in einem neuen Tab zu öffnen. Wähle links shop. Deine neue Tabelle wishlist steht in der Liste bei den anderen. Klicke auf wishlist und dann auf Browse, um ihre Zeilen zu sehen, und auf Structure, um den Primärschlüssel und den Unique Key zu sehen, die du angelegt hast.
Mach es noch einmal selbst
Tipp
Um die Lektion von vorn zu beginnen, entferne deine Tabelle mit sql "DROP TABLE wishlist" und gehe zurück zu Schritt 4. Probiere dann eigene Fragen aus: Welche Produkte kosten weniger als 10? Welche Kunden wohnen in Paris?
Wurde das Terminal neu gestartet, führe zuerst den alias aus Schritt 1 noch einmal aus. Die Datenbank behält deine Tabelle.