Trigger in MySQL: Automatisierte Datenbankaktionen leicht erklärt
Einführung
Die meisten Datenoperationen, einschließlich Trigger in MySQL, werden durch explizit ausgeführte SQL-Befehle wie SELECT, INSERT oder UPDATE ausgeführt.
SQL-Datenbanken können jedoch so konfiguriert werden, dass sie bei bestimmten Ereignissen automatisch vordefinierte Aktionen ausführen, sogenannte Trigger.
Beispielsweise können Sie Trigger in MySQL verwenden, um ein Prüfprotokoll aller DELETE-Anweisungen zu führen oder statistische Zusammenfassungen automatisch zu aktualisieren, wenn Zeilen in der Tabelle geändert oder hinzugefügt werden.
In diesem Tutorial verwenden Sie verschiedene Trigger in MySQL, um automatisch Aktionen auszuführen, wenn Zeilen eingefügt, aktualisiert oder gelöscht werden.
Voraussetzungen für Trigger in MySQL
Um diesem Leitfaden zu folgen, benötigen Sie einen Computer mit einem SQL-basierten relationalen Datenbankverwaltungssystem (RDBMS). Die Anweisungen und Beispiele in diesem Leitfaden wurden für das folgende Setup validiert:
- Ein Server mit Ubuntu 20.04, einem nicht-root Benutzer mit administrativen Rechten und einer mit UFW konfigurierten Firewall, wie im Setup-Leitfaden für Ubuntu 20.04 beschrieben.
- MySQL installiert und abgesichert mit einem nicht-root MySQL-Benutzer, wie in Schritt 3 des Installationsleitfadens für MySQL auf Ubuntu 20.04 beschrieben.
- Grundlegende Kenntnisse im Ausführen von SQL-Abfragen wie SELECT, INSERT, UPDATE und DELETE.
Kenntnisse über verschachtelte Abfragen und Aggregatfunktionen sind ebenfalls hilfreich.
Hinweis: Obwohl viele RDBMS eigene SQL-Implementierungen haben, sind Trigger in MySQL Teil des SQL-Standards. Syntax und Verhalten können sich jedoch zwischen Datenbanken unterscheiden, daher folgen die hier gezeigten Befehle der MySQL-Syntax und funktionieren möglicherweise nicht identisch auf anderen Systemen.
Außerdem benötigen Sie eine Datenbank mit Beispieldaten. Bitte richten Sie eine Testdatenbank ein, wie in der Sektion „Verbinden mit MySQL und Einrichten einer Beispieldatenbank“ beschrieben.
Verbinden mit MySQL und Einrichten einer Beispieldatenbank
In diesem Abschnitt verbinden Sie sich mit einem MySQL-Server und erstellen eine Beispieldatenbank für die kommenden Beispiele.
Für dieses Beispiel verwenden Sie eine fiktive Sammlung von Sammlerstücken. Details über die Sammlung werden gespeichert, ihr Gesamtwert bleibt jederzeit abrufbar, und das Entfernen eines Sammlerstücks hinterlässt immer eine Spur.
Falls Ihr SQL-Datenbanksystem auf einem Remote-Server läuft, loggen Sie sich per SSH ein:
ssh sammy@your_server_ip
Öffnen Sie dann die MySQL-Server-Eingabeaufforderung:
mysql -u sammy -p
Erstellen Sie eine Datenbank namens „collectibles“:
CREATE DATABASE collectibles;
Falls die Datenbank erfolgreich erstellt wurde, erhalten Sie eine Ausgabe wie:
Output
Query OK, 1 row affected (0.01 sec)
Um die Datenbank auszuwählen, führen Sie den folgenden Befehl aus:
USE collectibles;
Sie erhalten die folgende Ausgabe:
Output
Database changed
Nun können Sie Beispieltabellen erstellen, um Trigger in MySQL zu üben. Die Tabelle „collectibles“ enthält vereinfachte Daten über die Sammlerstücke mit folgenden Spalten:
- name: Der Name jedes Sammlerstücks als varchar-Datentyp mit max. 50 Zeichen.
- value: Der Marktwert des Sammlerstücks als decimal-Datentyp.
Erstellen Sie die Tabelle mit:
CREATE TABLE collectibles (
name varchar(50),
value decimal(5, 2)
);
Die Ausgabe zeigt die erfolgreiche Erstellung an:
Output
Query OK, 0 rows affected (0.00 sec)
Die zweite Tabelle, „collectibles_stats“, hält den Gesamtwert aller Sammlerstücke und hat folgende Spalten:
- count: Anzahl der Sammlerstücke als int-Datentyp.
- value: Gesamtwert aller Sammlerstücke als decimal-Datentyp.
Erstellen Sie die Tabelle mit:
CREATE TABLE collectibles_stats (
count int,
value decimal(5, 2)
);
Falls die Tabelle erfolgreich erstellt wurde:
Output
Query OK, 0 rows affected (0.00 sec)
Die dritte Tabelle „collectibles_archive“ speichert alle entfernten Sammlerstücke mit dem Entferndatum:
- name: Name des entfernten Sammlerstücks als varchar-Datentyp.
- value: Marktwert bei der Löschung als decimal-Datentyp.
- removed_on: Löschdatum als timestamp mit Standardwert NOW().
Erstellen Sie die Tabelle mit:
CREATE TABLE collectibles_archive (
name varchar(50),
value decimal(5, 2),
removed_on timestamp DEFAULT CURRENT_TIMESTAMP
);
Falls die Tabelle erfolgreich erstellt wurde:
Output
Query OK, 0 rows affected (0.00 sec)
Verstehen von Triggern in MySQL
Trigger führen automatisch Anweisungen für eine Tabelle bei bestimmten Ereignissen aus. Sie lösen bei INSERT-, UPDATE- oder DELETE-Befehlen sowie vor oder nach der Ausführung Aktionen aus.
Fazit: Trigger in MySQL
Dieser Leitfaden zeigt, wie Sie SQL-Trigger zur Datenmanipulation verwenden. Sie haben gelernt, wie man BEFORE DELETE-Trigger verwendet, um gelöschte Zeilen zu archivieren, und AFTER-Trigger, um Zusammenfassungen zu aktualisieren.
Trigger können die Datenintegrität gewährleisten und einige Datenbankoperationen automatisieren. Komplexe Trigger und bedingte Logik ermöglichen noch detailliertere Aktionen. Weitere Informationen finden Sie in der MySQL-Dokumentation zu Triggern.