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: UPDATE und Transaktion

Nach dieser Lektion: Ich kann Daten ändern, ohne etwas zu verlieren.

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

Der Kontostand verschwindet auf halbem Weg

Du überweist 30 Euro an eine Freundin. Das Programm zieht sie von deinem Konto ab. Dann bricht der Strom aus, bevor sie auf ihrem ankommen.

Das Geld ist weg. Eine Datenbank schützt davor mit einer Transaktion: Entweder passiert alles, oder nichts.

Am Ende dieser Lektion

Notiz

Ich kann Daten ändern, ohne etwas zu verlieren.

Schlüsselwörter

BegriffWas er bedeutet
INSERTfügt eine neue Zeile hinzu
UPDATEändert Werte in bestehenden Zeilen
DELETElöscht Zeilen
Transaktionmehrere Schritte, die ganz oder gar nicht gelten
Rollbacknimmt alle Änderungen einer Transaktion zurück

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

Drei Befehle ändern den Inhalt einer Tabelle

INSERT INTO tabelle (spalten) VALUES (werte) fügt eine Zeile hinzu. UPDATE tabelle SET spalte = wert WHERE bedingung ändert Zeilen. DELETE FROM tabelle WHERE bedingung löscht sie.

Bei UPDATE und DELETE entscheidet WHERE, welche Zeilen sie treffen. Ohne WHERE trifft der Befehl jede Zeile der Tabelle.

Beispiel: was fehlendes WHERE anrichtet

BefehlTrifft
UPDATE lager SET status = 'leer' WHERE id = 3Eine Zeile
UPDATE lager SET status = 'leer' WHERE bestand < 5Zwei Zeilen
UPDATE lager SET status = 'leer'Alle vier Zeilen

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

Erst mit SELECT ansehen, dann ändern

Ein UPDATE meldet nur, wie viele Zeilen es geändert hat. Ob es die richtigen waren, sagt es nicht.

Schreib darum zuerst ein SELECT mit demselben WHERE. Es zeigt dir genau die Zeilen, die der Befehl treffen würde. Stimmen sie, ersetzt du SELECT ... durch den Änderungsbefehl.

Probier es: erst ansehen, dann ändern

Code: sql
-- Erst ansehen, was das UPDATE treffen würde.
SELECT id, teil, bestand FROM lager WHERE bestand < 5;
-- Dann ändern, mit demselben WHERE.
UPDATE lager SET status = 'nachbestellen' WHERE bestand < 5;
-- Und prüfen.
SELECT id, teil, status FROM lager ORDER BY id;

Ein häufiger Fehler

Warnung

Viele glauben, man könne einen Fehler bei DELETE rückgängig machen wie ein gelöschtes Dokument. Das stimmt nicht. Eine bestätigte Änderung bleibt. Nur eine Transaktion, die du noch nicht bestätigt hast, lässt sich zurücknehmen.

Bevor du anfängst

Notiz

Drück oben in der Leiste auf Lab starten, warte auf beide Dienste und öffne das Terminal. Alle Runs arbeiten in deiner eigenen Datenbank student_kino. Der Shop bleibt unverändert.

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 die Datenbank shop

Befehl
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.

Eine eigene Datenbank anlegen

Befehl
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

Befehl
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.

Zwei Konten anlegen und füllen

Befehl
kino "DROP TABLE IF EXISTS konten; CREATE TABLE konten (id INT AUTO_INCREMENT PRIMARY KEY, inhaber VARCHAR(20) NOT NULL, stand INT NOT NULL); INSERT INTO konten (inhaber, stand) VALUES ('Anna', 100), ('Ben', 50)"

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

Eine Überweisung besteht aus zwei Änderungen: Abziehen und Gutschreiben. Beide gehören zusammen.

Mit START TRANSACTION beginnst du eine Transaktion. Mit COMMIT bestätigst du alle Änderungen. Mit ROLLBACK nimmst du alle zurück, als hätte es sie nie gegeben.

Abziehen, ansehen und alles zurücknehmen

Befehl
kino "START TRANSACTION; UPDATE konten SET stand = stand - 30 WHERE inhaber = 'Anna'; SELECT inhaber, stand FROM konten ORDER BY inhaber; ROLLBACK; SELECT inhaber, stand FROM konten ORDER BY inhaber"

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 ganze Überweisung bestätigen

Befehl
kino "START TRANSACTION; UPDATE konten SET stand = stand - 30 WHERE inhaber = 'Anna'; UPDATE konten SET stand = stand + 30 WHERE inhaber = 'Ben'; COMMIT; SELECT inhaber, stand FROM konten ORDER BY inhaber"

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 Zeile löschen, dann zählen

Befehl
kino "DELETE FROM konten WHERE inhaber = 'Ben'; SELECT COUNT(*) AS konten FROM konten"

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

Ü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.