Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Daten sicher ändern

Nach dieser Lektion: Ich kann Zeilen sicher hinzufügen, ändern und löschen.

Lektion, 55 Min.14 BefehleMySQL-und-phpMyAdmin-Lab mit Beispieldatenbank eines Shops zum Üben von SQL

Plötzlich kostete alles null Euro

Ein junger Entwickler wollte den Preis eines einzigen Artikels ändern. Er vergaß ein kurzes Wort.

Danach stand jeder Artikel der Tabelle auf 0 Euro, und der Shop verschenkte Ware bis zum Mittag.

Daten zu ändern ist leicht. Die Kunst ist, nur die Daten zu ändern, die man meint.

Am Ende dieser Lektion

Notiz

Ich kann Zeilen sicher hinzufügen, ändern und löschen.

Schlüsselwörter

BegriffWas er bedeutet
INSERTfügt einer Tabelle neue Zeilen hinzu
UPDATEändert Werte in Zeilen, die schon da sind
DELETEentfernt Zeilen aus einer Tabelle
Transaktioneine Gruppe von Änderungen, die alle gelten oder keine
Commitmacht die Änderungen einer Transaktion dauerhaft
Rollbackmacht die Änderungen einer Transaktion rückgängig

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Arbeiten Sie an einer Kopie, nie am Shop

In dieser Lektion ändern Sie Daten. Der Shop soll bleiben, wie er ist. Darum machen Sie zuerst eine Kopie.

Diese Runs melden sich an, legen Ihre eigene Datenbank student_depot an und kopieren die vier Gartenartikel in eine Tabelle regal.

Sie können sie jederzeit noch einmal starten, um von vorn zu beginnen.

Das Zertifikat des Servers annehmen

Befehl
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnf

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 für den Client

Befehl
alias db='mariadb -h db -u student -pstudent -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.

Eine eigene Datenbank anlegen

Befehl
db "CREATE DATABASE IF NOT EXISTS student_depot"

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 alte Kopie wegwerfen

Befehl
db "DROP TABLE IF EXISTS student_depot.regal"

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 Gartenartikel kopieren

Befehl
db "CREATE TABLE student_depot.regal AS SELECT id, name, price, stock FROM shop.products WHERE category_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.

INSERT fügt eine Zeile hinzu

INSERT INTO nennt die Tabelle und ihre Spalten. VALUES gibt für jede neue Zeile eine Klammer mit Werten an.

Geben Sie die Werte in der Reihenfolge der Spalten an. Eine Spalte, die Sie weglassen, erhält ihren Standardwert oder NULL.

Verletzt eine Zeile eine Schlüsselregel, lehnt die Datenbank sie ab, wie in der ersten Lektion.

Ein Paar Gartenhandschuhe eintragen

Befehl
db "INSERT INTO student_depot.regal (id, name, price, stock) VALUES (100, 'Gartenhandschuhe', 6.50, 25)"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

UPDATE ändert Zeilen, WHERE wählt sie aus

UPDATE nennt die Tabelle. SET gibt den neuen Wert. WHERE wählt die Zeilen.

Ohne WHERE ändert sich jede Zeile.

Die sichere Gewohnheit hat drei Schritte. Schreiben Sie ein SELECT mit demselben WHERE. Prüfen Sie, ob es die gemeinten Zeilen zeigt. Machen Sie dann aus SELECT ein UPDATE.

Schritt 1: erst die Zeilen ansehen

Befehl
db "SELECT id, name, stock FROM student_depot.regal WHERE stock < 15 ORDER BY 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.

Schritt 2: genau diese Zeilen ändern

Befehl
db "UPDATE student_depot.regal SET stock = stock + 10 WHERE stock < 15"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Schritt 3: noch einmal ansehen

Befehl
db "SELECT id, name, stock FROM student_depot.regal ORDER BY 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.

DELETE entfernt Zeilen endgültig

DELETE FROM entfernt die Zeilen, die zu seinem WHERE passen. Ohne WHERE leert es die ganze Tabelle.

Es gibt keinen Papierkorb. Dieselben drei Schritte gelten: erst SELECT, dann DELETE, dann wieder SELECT.

Die Handschuhe wieder entfernen

Befehl
db "DELETE FROM student_depot.regal WHERE id = 100"

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 häufiger Fehler

Warnung

Viele glauben, ein UPDATE oder DELETE treffe nur die Zeile, an die sie denken. Es trifft jede Zeile, die passt, und ohne WHERE sind das alle. Schreiben Sie zuerst das WHERE und prüfen Sie es mit einem SELECT.

Der Fehler, nur an der Kopie

Befehl
db "UPDATE student_depot.regal SET stock = 0"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ansehen, was er angerichtet hat

Befehl
db "SELECT id, name, stock FROM student_depot.regal ORDER BY 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.

Eine Transaktion gilt ganz oder gar nicht

50 Euro von einem Konto auf ein anderes zu buchen sind zwei Änderungen. Fällt der Rechner dazwischen aus, sind 50 Euro verschwunden.

Eine Transaktion fasst die Änderungen zusammen. COMMIT macht alle dauerhaft. ROLLBACK macht alle rückgängig.

Bis zum Commit sieht niemand sonst die Änderungen. Der nächste Run zeigt ein Rollback: Er löscht jede Zeile Ihrer Kopie, nimmt das zurück und zählt dann die Zeilen.

Alles löschen und zurücknehmen

Befehl
db "START TRANSACTION; DELETE FROM student_depot.regal; ROLLBACK; SELECT COUNT(*) AS noch_da FROM student_depot.regal"

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 Beispiel: ein Absturz in der Mitte

SchrittKonto 1Konto 2Ohne TransaktionMit Transaktion
Beginn200 €100 €In OrdnungIn Ordnung
Nach der ersten Änderung150 €100 €50 € fehlenNoch nicht dauerhaft
Absturz150 €100 €Bleibt falschZurück auf 200 € und 100 €
Beide Änderungen und COMMIT150 €150 €In OrdnungIn Ordnung

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Den Standardmodus ansehen

Befehl
db "SELECT @@autocommit AS autocommit"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Warum die Antwort 1 ist

Notiz

Normalerweise ist jede Anweisung eine winzige Transaktion, die sofort gilt. Darum lässt sich ein einzelnes UPDATE nicht zurücknehmen. Für ein Rollback müssen Sie in einer Sitzung zuerst START TRANSACTION schreiben.

Über dieses Lab und seinen Quellcode: MySQL-und-phpMyAdmin-Lab mit Beispieldatenbank eines Shops zum Üben von SQL

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.