MySQL Trigger für Automatisierung

MySQLBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie, wie Sie MySQL-Trigger verwenden, um Datenbankaktionen zu automatisieren. Trigger sind gespeicherte Programme, die automatisch als Reaktion auf bestimmte Ereignisse in einer Tabelle ausgeführt werden, wie z. B. INSERT, UPDATE oder DELETE-Operationen.

Sie erstellen eine products-Tabelle zur Speicherung von Artikelinformationen und eine product_logs-Tabelle zur Überprüfung von Änderungen. Anschließend implementieren Sie einen Trigger, der automatisch einen Log-Eintrag in product_logs hinzufügt, jedes Mal wenn ein neues Produkt in die products-Tabelle eingefügt wird. Das Lab führt Sie auch durch das Testen, Aktualisieren und Entfernen des Triggers.

Datenbank und Tabellen einrichten

Bevor Sie einen Trigger erstellen, benötigen Sie eine Datenbank und die notwendigen Tabellen. In diesem Schritt erstellen Sie eine Datenbank namens mydatabase und zwei Tabellen: products zur Speicherung von Produktdaten und product_logs zur Speicherung von Audit-Protokollen.

Öffnen Sie zuerst das Terminal auf Ihrem Desktop.

Verbinden Sie sich als Benutzer root mit dem MySQL-Server. Da dies eine Laborumgebung ist, können Sie sudo verwenden, um sich ohne Passwort zu verbinden.

sudo mysql -u root

Sobald Sie verbunden sind, sehen Sie die MySQL-Eingabeaufforderung (mysql>).

Erstellen Sie nun die Datenbank mydatabase und wechseln Sie zu ihr. Die Klausel IF NOT EXISTS verhindert einen Fehler, falls die Datenbank bereits existiert.

CREATE DATABASE IF NOT EXISTS mydatabase;
USE mydatabase;

Erstellen Sie als Nächstes die Tabelle products. Diese Tabelle speichert die ID, den Namen und den Preis jedes Produkts.

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    price DECIMAL(10, 2) NOT NULL
);

Erstellen Sie nun die Tabelle product_logs. Diese Tabelle speichert ein Protokoll jedes neu hinzugefügten Produkts.

CREATE TABLE product_logs (
    log_id INT AUTO_INCREMENT PRIMARY KEY,
    product_id INT,
    action_description VARCHAR(255),
    log_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Sie können überprüfen, ob beide Tabellen erfolgreich erstellt wurden, indem Sie Folgendes ausführen:

SHOW TABLES;

In der Ausgabe sollten die Tabellen products und product_logs aufgeführt sein.

+--------------------+
| Tables_in_mydatabase |
+--------------------+
| product_logs       |
| products           |
+--------------------+
2 rows in set (0.00 sec)

Nachdem die Datenbank und die Tabellen nun bereit sind, können Sie mit dem nächsten Schritt fortfahren.

Trigger erstellen und testen

Nachdem die Tabellen eingerichtet sind, können Sie nun einen Trigger erstellen. Dieser Trigger wird nach dem Einfügen einer neuen Zeile in die Tabelle products aktiviert und fügt einen entsprechenden Eintrag in die Tabelle product_logs ein.

Wechseln Sie zu Ihrer Datenbank.

USE mydatabase;

Erstellen Sie nun den Trigger. Der Befehl DELIMITER wird verwendet, um den Standardtrenner (;) in // zu ändern, damit das Semikolon innerhalb des Trigger-Körpers nicht als Ende der CREATE TRIGGER-Anweisung interpretiert wird.

DELIMITER //

CREATE TRIGGER products_after_insert
AFTER INSERT ON products
FOR EACH ROW
BEGIN
    INSERT INTO product_logs (product_id, action_description)
    VALUES (NEW.id, CONCAT('New product added: ', NEW.name));
END//

DELIMITER ;

Lassen Sie uns diese Anweisung aufschlüsseln:

  • CREATE TRIGGER products_after_insert: Definiert einen neuen Trigger mit dem Namen products_after_insert.
  • AFTER INSERT ON products: Gibt an, dass der Trigger nach einem INSERT-Ereignis in der Tabelle products ausgelöst wird.
  • FOR EACH ROW: Zeigt an, dass die Logik des Triggers für jede eingefügte Zeile ausgeführt wird.
  • BEGIN...END: Umschließt die SQL-Anweisungen des Triggers.
  • NEW.id, NEW.name: Das Schlüsselwort NEW bezieht sich auf die gerade eingefügte Zeile. NEW.id ist die id des neuen Produkts und NEW.name ist sein Name.

Testen wir nun den Trigger, indem wir ein neues Produkt einfügen.

INSERT INTO products (name, price) VALUES ('Laptop', 1200.00);

Diese INSERT-Operation sollte den Trigger aktiviert haben. Um dies zu bestätigen, überprüfen Sie den Inhalt der Tabelle product_logs.

SELECT * FROM product_logs;

Sie sollten einen Datensatz in der Tabelle product_logs sehen, der automatisch vom Trigger erstellt wurde. Die Ausgabe wird ähnlich wie folgt aussehen (die log_id und log_time variieren):

+--------+------------+-----------------------------+---------------------+
| log_id | product_id | action_description          | log_time            |
+--------+------------+-----------------------------+---------------------+
|      1 |          1 | New product added: Laptop   | 2024-05-27 10:30:00 |
+--------+------------+-----------------------------+---------------------+
1 row in set (0.00 sec)

Dies bestätigt, dass Ihr Trigger korrekt funktioniert.

Trigger-Logik aktualisieren

Ihre Anforderungen können sich im Laufe der Zeit ändern. Möglicherweise möchten Sie beispielsweise mehr Details protokollieren. In diesem Schritt aktualisieren Sie den Trigger, um auch den Preis des neuen Produkts zu protokollieren.

In MySQL können Sie einen Trigger nicht direkt ändern. Sie müssen zuerst den vorhandenen Trigger löschen und dann einen neuen mit der aktualisierten Logik erstellen.

Wechseln Sie zu Ihrer Datenbank.

USE mydatabase;

Löschen Sie zuerst den vorhandenen Trigger. Die Klausel IF EXISTS verhindert einen Fehler, falls der Trigger bereits entfernt wurde.

DROP TRIGGER IF EXISTS products_after_insert;

Erstellen Sie nun den Trigger mit der aktualisierten Logik neu. Diese neue Version enthält den Preis des Produkts in der action_description.

DELIMITER //

CREATE TRIGGER products_after_insert
AFTER INSERT ON products
FOR EACH ROW
BEGIN
    INSERT INTO product_logs (product_id, action_description)
    VALUES (NEW.id, CONCAT('New product added: ', NEW.name, ' with price ', NEW.price));
END//

DELIMITER ;

Um den aktualisierten Trigger zu testen, fügen Sie ein weiteres Produkt ein.

INSERT INTO products (name, price) VALUES ('Mouse', 25.00);

Fragen Sie nun die Tabelle product_logs ab, um alle Protokolleinträge anzuzeigen.

SELECT * FROM product_logs;

Die Ausgabe sollte nun zwei Protokolleinträge anzeigen. Der zweite Eintrag für die 'Mouse' sollte den Preis in seiner Beschreibung enthalten, was bestätigt, dass Ihr aktualisierter Trigger funktioniert.

+--------+------------+----------------------------------------------+---------------------+
| log_id | product_id | action_description                           | log_time            |
+--------+------------+----------------------------------------------+---------------------+
|      1 |          1 | New product added: Laptop                    | 2024-05-27 10:30:00 |
|      2 |          2 | New product added: Mouse with price 25.00    | 2024-05-27 10:35:00 |
+--------+------------+----------------------------------------------+---------------------+
2 rows in set (0.00 sec)

Sie haben den Trigger erfolgreich aktualisiert.

Trigger löschen

Wenn ein Trigger nicht mehr benötigt wird, sollten Sie ihn entfernen, um unnötige Verarbeitung und potenzielle Wartungsprobleme zu vermeiden. In diesem letzten Schritt löschen Sie den Trigger products_after_insert.

Wechseln Sie zu Ihrer Datenbank.

USE mydatabase;

Um den Trigger zu löschen, verwenden Sie die Anweisung DROP TRIGGER.

DROP TRIGGER IF EXISTS products_after_insert;

Sie können überprüfen, ob der Trigger entfernt wurde, indem Sie den Befehl SHOW TRIGGERS ausführen.

SHOW TRIGGERS;

Dieser Befehl sollte ein leeres Set zurückgeben, was bestätigt, dass der Trigger entfernt wurde.

Empty set (0.00 sec)

Um absolut sicher zu sein, fügen Sie ein weiteres Produkt ein.

INSERT INTO products (name, price) VALUES ('Keyboard', 75.00);

Überprüfen Sie nun die Tabelle product_logs.

SELECT * FROM product_logs;

Die Tabelle sollte immer noch nur die ersten beiden Protokolleinträge enthalten. Das Produkt 'Keyboard' sollte keinen Protokolleintrag haben, da der Trigger vor dem Einfügen gelöscht wurde.

+--------+------------+----------------------------------------------+---------------------+
| log_id | product_id | action_description                           | log_time            |
+--------+------------+----------------------------------------------+---------------------+
|      1 |          1 | New product added: Laptop                    | 2024-05-27 10:30:00 |
|      2 |          2 | New product added: Mouse with price 25.00    | 2024-05-27 10:35:00 |
+--------+------------+----------------------------------------------+---------------------+
2 rows in set (0.00 sec)

Dies bestätigt, dass der Trigger erfolgreich entfernt wurde. Sie können die MySQL-Shell nun verlassen.

exit;

Zusammenfassung

In diesem Lab haben Sie die Grundlagen der Verwendung von MySQL-Triggern zur Automatisierung gelernt. Sie haben erfolgreich eine Datenbankumgebung eingerichtet, Tabellen erstellt und einen Trigger implementiert, um Daten-Einfügeereignisse zu protokollieren. Sie haben auch den vollständigen Lebenszyklus eines Triggers geübt, einschließlich Erstellung, Test, Aktualisierung und Löschung.

Diese Fähigkeiten sind unerlässlich für Aufgaben wie die Erstellung von Audit-Trails, die Durchsetzung komplexer Geschäftsregeln und die automatische Aufrechterhaltung der Datenintegrität in Ihrer Datenbank.