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

Eine Sicherung vor jeder Änderung

Nach dieser Lektion: Ich kann eine Tabelle vor einer Änderung sichern und sie wiederherstellen, wenn die Änderung falsch war.

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

Die Änderung, die niemand zurücknehmen konnte

An einem Freitagnachmittag korrigiert ein Ingenieur die Preise eines Lieferanten. Das UPDATE ist richtig. Im WHERE steckt ein Tippfehler, und es trifft die ganze Tabelle.

Eine Datenbank hat keine Rückgängig-Taste. Der einzige Weg zurück ist eine Kopie, die vor der Änderung gemacht wurde.

Im Beruf ist diese Kopie der erste Schritt, jedes Mal.

Am Ende dieser Lektion

Notiz

Ich kann eine Tabelle vor einer Änderung sichern und sie wiederherstellen, wenn die Änderung falsch war.

Schlüsselwörter

BegriffWas er bedeutet
Sicherungeine Kopie von Daten, damit Sie sie zurückholen können
Dumpeine Textdatei mit dem SQL, das eine Tabelle und ihre Zeilen neu aufbaut
Wiederherstellendie Daten aus einer Sicherung zurückspielen
Betroffene Zeilenwie viele Zeilen eine Änderung berührt hat
Probelaufeine Änderung in einer Transaktion ausprobieren und zurückrollen

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

Arbeiten Sie an einer Kopie des Shops

Sie werden Daten ändern und dann reparieren. Der Shop soll unverändert bleiben.

Diese Runs legen in Ihrer eigenen Datenbank eine Tabelle preisliste an, kopiert aus den Artikeln des Shops.

Sie können sie jederzeit wiederholen, 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.preisliste"

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

Befehl
db "CREATE TABLE student_depot.preisliste AS SELECT id, name, price AS preis, stock AS bestand FROM shop.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.

Den Zustand jetzt festhalten

Befehl
db "SELECT COUNT(*) AS zeilen_jetzt, MIN(preis) AS guenstigster, MAX(preis) AS teuerster FROM student_depot.preisliste"

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 Dump ist eine lesbare Sicherung

Das Werkzeug mariadb-dump fragt den Server nach einer Tabelle und schreibt das SQL, das sie neu aufbaut. Die Datei enthält eine Zeile CREATE TABLE und je Tabellenzeile ein INSERT.

Die Option --skip-extended-insert legt eine Tabellenzeile in eine Dateizeile. --no-tablespaces ist nötig, weil Ihr Konto die Speicherdateien des Servers nicht lesen darf.

Das Zeichen > leitet die Ausgabe in eine Datei um statt auf den Bildschirm.

Die Tabelle in eine Datei sichern

Befehl
mariadb-dump -h db -u student -pstudent --skip-extended-insert --no-tablespaces student_depot preisliste > preisliste.sql

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 INSERT-Zeilen der Datei zählen

Befehl
grep -c "^INSERT" preisliste.sql

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 erste gesicherte Zeile lesen

Befehl
grep -m1 "^INSERT" preisliste.sql

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

Den Fehler machen und dann reparieren

Tun Sie jetzt, was der Ingenieur tat. Führen Sie ein UPDATE ohne WHERE auf der Kopie aus.

Sehen Sie sich dann die Preise an. Spielen Sie danach die Datei zurück. Der Dump beginnt jede Tabelle mit DROP TABLE IF EXISTS, deshalb ersetzt das Laden die beschädigte Tabelle.

Alle Preise auf null setzen

Befehl
db "UPDATE student_depot.preisliste SET preis = 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.

Den Schaden ansehen

Befehl
db "SELECT COUNT(*) AS zeilen_jetzt, MIN(preis) AS guenstigster, MAX(preis) AS teuerster FROM student_depot.preisliste"

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

Aus der Datei wiederherstellen

Befehl
mariadb -h db -u student -pstudent student_depot < preisliste.sql

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 reparierte Tabelle ansehen

Befehl
db "SELECT COUNT(*) AS zeilen_jetzt, MIN(preis) AS guenstigster, MAX(preis) AS teuerster FROM student_depot.preisliste"

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 denken, eine Sicherung sei sicher, sobald die Datei existiert. Eine Datei, die Sie nie zurückgespielt haben, ist nur eine Hoffnung. Sie kann leer oder abgeschnitten sein. Zählen Sie die Zeilen darin und üben Sie das Zurückspielen an einer Kopie.

Prüfen, wie viele Zeilen eine Änderung berührt

Eine Sicherung hilft, wenn etwas schiefgeht. Besser ist es, den Schaden zu sehen, bevor er endgültig ist.

Starten Sie eine Transaktion. Führen Sie das UPDATE aus. Fragen Sie ROW_COUNT(), wie viele Zeilen es geändert hat. Ist die Zahl falsch, machen Sie ROLLBACK. Stimmt sie, führen Sie es noch einmal aus und machen COMMIT.

Das ist ein Probelauf.

Eine Änderung ausprobieren und zurückrollen

Befehl
db "START TRANSACTION; UPDATE student_depot.preisliste SET bestand = bestand + 5 WHERE bestand < 10; SELECT ROW_COUNT() AS geaendert; ROLLBACK"

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 Zeilen zählen, die das WHERE wählt

Befehl
db "SELECT COUNT(*) AS bestand_niedrig FROM student_depot.preisliste WHERE bestand < 10"

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

Beispiel: eine sichere Änderung in fünf Schritten

SchrittWas Sie tunWovor es schützt
1Die Tabelle in eine Datei sicherneine Änderung, die sich nicht zurücknehmen lässt
2SELECT COUNT(*) mit demselben WHEREein WHERE, das zu viel trifft
3START TRANSACTION und das UPDATE ausführeneine Änderung, die schon endgültig ist
4ROW_COUNT() mit Schritt 2 vergleicheneine Zahl, die Sie nicht erwartet haben
5COMMIT, oder ROLLBACK und neu anseheneine falsche Änderung zu beenden

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

Zum Weiterdenken

Sichern Sie die ganze Datenbank student_depot, indem Sie den Tabellennamen weglassen. Zählen Sie ihre Zeilen CREATE TABLE.

Im echten Beruf kopieren Sie die Datei auch an einen anderen Ort und testen das Zurückspielen auf einem anderen Server. Eine Sicherung am selben Ort wie die Daten geht mit ihnen verloren.

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