MySQL-Funktionen und benutzerdefinierte Logik

MySQLBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie, wie Sie benutzerdefinierte Funktionen in MySQL erstellen und verwenden. Das Lab konzentriert sich auf die Kapselung wiederverwendbarer Logik in Ihrer Datenbank durch die Erstellung einer Funktion zur Berechnung der Fläche eines Rechtecks.

Die Schritte umfassen die Verbindung zum MySQL-Server, die Erstellung einer Datenbank (falls erforderlich), die Definition der Funktion calculate_rectangle_area mit Eingabeparametern für Länge und Breite sowie die Angabe des Rückgabedatentyps. Der Funktionskörper berechnet die Fläche und gibt das Ergebnis zurück. Nachfolgende Schritte behandeln die Verwendung dieser Funktion in einer SELECT-Abfrage, das Testen ihrer Ausgabe mit Beispieldaten und schließlich das Löschen der Funktion.

Verbindung zu MySQL herstellen und Datenbank erstellen

In diesem Schritt verbinden Sie sich mit dem MySQL-Server und erstellen eine Datenbank, in der Sie Ihre benutzerdefinierte Funktion erstellen und verwenden werden.

Öffnen Sie zunächst Ihr Terminal und verbinden Sie sich als Root-Benutzer mit dem MySQL-Server. Führen Sie den folgenden Befehl einmal zu Beginn des Labs aus:

sudo mysql -u root

Dieser Befehl verwendet sudo, um den mysql-Client als Root-Benutzer auszuführen. Da der Root-Benutzer in dieser Umgebung kein Passwort festgelegt hat, werden Sie direkt zur MySQL-Shell verbunden. Sie sehen die Eingabeaufforderung mysql>.

Bleiben Sie während aller nachfolgenden Schritte in der MySQL-Shell. Verlassen Sie diese nicht bis zum Ende des Labs.

Erstellen wir nun eine Datenbank namens my_functions_db. Diese Datenbank wird zum Speichern unserer Tabelle und Funktion verwendet. Führen Sie den folgenden SQL-Befehl an der mysql>-Eingabeaufforderung aus:

CREATE DATABASE IF NOT EXISTS my_functions_db;

Nachdem Sie die Datenbank erstellt haben, wählen Sie sie aus, um sie zur Standarddatenbank für nachfolgende Operationen zu machen:

USE my_functions_db;

Sie sollten eine Meldung sehen, die darauf hinweist, dass die Datenbank geändert wurde.

Nun sind Sie mit der Datenbank my_functions_db verbunden und bereit, im nächsten Schritt Ihre benutzerdefinierte Funktion zu erstellen.

Funktion zur Berechnung der Rechteckfläche erstellen

In diesem Schritt erstellen Sie eine benutzerdefinierte Funktion in MySQL zur Berechnung der Fläche eines Rechtecks. Diese Funktion nimmt Länge und Breite als Eingabe und gibt die berechnete Fläche zurück.

Stellen Sie sicher, dass Sie sich immer noch in der MySQL-Shell befinden und die Datenbank my_functions_db wie im vorherigen Schritt beschrieben ausgewählt haben.

Erstellen wir nun die Funktion namens calculate_rectangle_area. Diese Funktion akzeptiert zwei Integer-Parameter, length und width, und gibt einen Integer zurück, der die Fläche repräsentiert.

Führen Sie den folgenden SQL-Befehl in der MySQL-Shell aus:

DELIMITER //

CREATE FUNCTION calculate_rectangle_area (length INT, width INT)
RETURNS INT
DETERMINISTIC
BEGIN
  DECLARE area INT;
  SET area = length * width;
  RETURN area;
END //

DELIMITER ;

Lassen Sie uns diesen Befehl aufschlüsseln:

  • DELIMITER //: Dies ändert den Anweisungsbegrenzer vom Standard-Semikolon (;) zu //. Dies ist notwendig, da die Funktionsdefinition Semikolons innerhalb ihres Körpers enthält.
  • CREATE FUNCTION calculate_rectangle_area (length INT, width INT): Dies definiert den Funktionsnamen (calculate_rectangle_area) und seine Eingabeparameter (length und width, beide vom Typ INT).
  • RETURNS INT: Dies gibt an, dass die Funktion einen Integer-Wert zurückgibt.
  • DETERMINISTIC: Dieses Schlüsselwort zeigt an, dass die Funktion für dieselben Eingabewerte immer dieselbe Ausgabe liefert. Dies hilft MySQL, Abfragen zu optimieren, die die Funktion verwenden.
  • BEGIN ... END: Dieser Block enthält die Logik der Funktion.
  • DECLARE area INT;: Dies deklariert eine lokale Variable namens area vom Typ INT innerhalb der Funktion.
  • SET area = length * width;: Dies berechnet die Fläche, indem die Parameter length und width multipliziert und das Ergebnis der Variablen area zugewiesen wird.
  • RETURN area;: Dies gibt den Wert zurück, der in der Variablen area gespeichert ist, als Ausgabe der Funktion.
  • END //: Dies markiert das Ende der Funktionsdefinition unter Verwendung des temporären Begrenzers //.
  • DELIMITER ;: Dies ändert den Begrenzer zurück zum Standard-Semikolon (;).

Nach Ausführung dieses Befehls wird die Funktion calculate_rectangle_area in der Datenbank my_functions_db erstellt.

Um zu überprüfen, ob die Funktion erfolgreich erstellt wurde, können Sie die Funktionen in der aktuellen Datenbank auflisten:

SHOW FUNCTION STATUS LIKE 'calculate_rectangle_area';

Dieser Befehl zeigt Informationen über die Funktion an und bestätigt deren Existenz.

Funktion in einer SELECT-Abfrage verwenden

Nachdem Sie die Funktion calculate_rectangle_area erstellt haben, können Sie sie in einer SELECT-Abfrage verwenden, um die Fläche von Rechtecken basierend auf in einer Tabelle gespeicherten Daten zu berechnen.

Arbeiten Sie in derselben MySQL-Shell-Sitzung weiter und stellen Sie sicher, dass Sie weiterhin die Datenbank my_functions_db verwenden.

Erstellen wir zunächst eine Tabelle namens rectangles, um die Abmessungen verschiedener Rechtecke zu speichern. Führen Sie den folgenden SQL-Befehl aus:

CREATE TABLE IF NOT EXISTS rectangles (
  id INT AUTO_INCREMENT PRIMARY KEY,
  length INT,
  width INT
);

Dieser Befehl erstellt eine Tabelle mit einer automatisch inkrementierenden id als Primärschlüssel und Spalten für length und width.

Fügen Sie als Nächstes einige Beispieldaten in die Tabelle rectangles ein:

INSERT INTO rectangles (length, width) VALUES (5, 10);
INSERT INTO rectangles (length, width) VALUES (7, 8);
INSERT INTO rectangles (length, width) VALUES (12, 3);

Diese Befehle fügen drei Zeilen mit unterschiedlichen Längen- und Breitenwerten in die Tabelle rectangles ein.

Nun können Sie die Funktion calculate_rectangle_area in einer SELECT-Abfrage verwenden, um die Rechteckabmessungen und ihre berechneten Flächen abzurufen. Führen Sie den folgenden SQL-Befehl aus:

SELECT id, length, width, calculate_rectangle_area(length, width) AS area FROM rectangles;

In dieser Abfrage:

  • SELECT id, length, width: Dies wählt die Spalten id, length und width aus der Tabelle rectangles aus.
  • calculate_rectangle_area(length, width): Dies ruft die Funktion calculate_rectangle_area auf und übergibt die Werte aus den Spalten length und width jeder Zeile als Argumente.
  • AS area: Dies weist dem von der Funktion zurückgegebenen Ergebnis den Alias area zu, wodurch die Ausgabespalte besser lesbar wird.
  • FROM rectangles: Dies gibt an, dass die Daten aus der Tabelle rectangles abgerufen werden sollen.

Die Ausgabe dieser Abfrage zeigt die id, length, width und die berechnete area für jedes Rechteck in der Tabelle. Sie sollten eine Ausgabe ähnlich der folgenden sehen:

+----+--------+-------+------+
| id | length | width | area |
+----+--------+-------+------+
|  1 |      5 |    10 |   50 |
|  2 |      7 |     8 |   56 |
|  3 |     12 |     3 |   36 |
+----+--------+-------+------+

Dies zeigt, wie Sie Ihre benutzerdefinierte Funktion effektiv in einer Standard-SQL-Abfrage verwenden können, um Berechnungen mit Ihren Daten durchzuführen.

Funktionsausgabe mit Beispieldaten testen

In diesem Schritt testen Sie die Funktion calculate_rectangle_area weiter, indem Sie weitere Beispieldaten in die Tabelle rectangles einfügen und die berechneten Flächen überprüfen. Dies hilft sicherzustellen, dass die Funktion mit verschiedenen Eingabewerten korrekt funktioniert.

Arbeiten Sie in derselben MySQL-Shell-Sitzung weiter und stellen Sie sicher, dass Sie weiterhin die Datenbank my_functions_db verwenden.

Fügen Sie nun zusätzliche Zeilen mit unterschiedlichen Längen- und Breitenwerten in die Tabelle rectangles ein:

INSERT INTO rectangles (length, width) VALUES (10, 10);
INSERT INTO rectangles (length, width) VALUES (2, 5);
INSERT INTO rectangles (length, width) VALUES (15, 4);

Diese Befehle fügen drei weitere Zeilen in die Tabelle rectangles ein.

Führen Sie nun erneut die SELECT-Abfrage aus, um die berechneten Flächen für alle Rechtecke, einschließlich der neu hinzugefügten, anzuzeigen:

SELECT id, length, width, calculate_rectangle_area(length, width) AS area FROM rectangles;

Die Ausgabe enthält nun die Flächen für die neuen Rechtecke:

+----+--------+-------+------+
| id | length | width | area |
+----+--------+-------+------+
|  1 |      5 |    10 |   50 |
|  2 |      7 |     8 |   56 |
|  3 |     12 |     3 |   36 |
|  4 |     10 |    10 |  100 |
|  5 |      2 |     5 |   10 |
|  6 |     15 |     4 |   60 |
+----+--------+-------+------+

Überprüfen Sie die Ausgabe und bestätigen Sie, dass die berechneten Flächen für die neuen Zeilen korrekt sind:

  • Bei Länge 10 und Breite 10 beträgt die Fläche 100 (10 * 10).
  • Bei Länge 2 und Breite 5 beträgt die Fläche 10 (2 * 5).
  • Bei Länge 15 und Breite 4 beträgt die Fläche 60 (15 * 4).

Dieser Schritt vertieft Ihr Verständnis für die Verwendung der Funktion mit unterschiedlichen Daten und bestätigt deren Genauigkeit.

Funktion und Tabelle löschen

In diesem letzten Schritt bereinigen Sie die Datenbank, indem Sie die Funktion calculate_rectangle_area und die Tabelle rectangles löschen. Dies ist eine gute Praxis, um Objekte zu entfernen, die Sie nicht mehr benötigen.

Arbeiten Sie in derselben MySQL-Shell-Sitzung weiter und stellen Sie sicher, dass Sie weiterhin die Datenbank my_functions_db verwenden.

Löschen wir zunächst die Funktion calculate_rectangle_area. Führen Sie den folgenden SQL-Befehl aus:

DROP FUNCTION IF EXISTS calculate_rectangle_area;
  • DROP FUNCTION: Dieser Befehl wird verwendet, um eine Funktion zu entfernen.
  • IF EXISTS: Diese Klausel verhindert einen Fehler, wenn die Funktion nicht existiert.

Als Nächstes löschen wir die Tabelle rectangles. Führen Sie den folgenden SQL-Befehl aus:

DROP TABLE IF EXISTS rectangles;
  • DROP TABLE: Dieser Befehl wird verwendet, um eine Tabelle zu entfernen.
  • IF EXISTS: Diese Klausel verhindert einen Fehler, wenn die Tabelle nicht existiert.

Nachdem diese Befehle ausgeführt wurden, werden sowohl die Funktion als auch die Tabelle aus der Datenbank my_functions_db entfernt.

Um zu überprüfen, ob die Funktion gelöscht wurde, können Sie versuchen, die Funktionen erneut aufzulisten:

SHOW FUNCTION STATUS LIKE 'calculate_rectangle_area';

Dieser Befehl sollte nun ein leeres Ergebnis liefern, was darauf hinweist, dass die Funktion nicht mehr vorhanden ist.

Um zu überprüfen, ob die Tabelle gelöscht wurde, können Sie versuchen, daraus auszuwählen:

SELECT * FROM rectangles;

Dieser Befehl sollte einen Fehler ähnlich wie ERROR 1146 (42S02): Table 'my_functions_db.rectangles' doesn't exist zurückgeben, was darauf hinweist, dass die Tabelle nicht mehr vorhanden ist.

Sie können die MySQL-Shell nun verlassen, indem Sie exit eingeben und die Eingabetaste drücken.

Sie haben erfolgreich eine benutzerdefinierte Funktion und eine Tabelle in MySQL erstellt, verwendet, getestet und gelöscht.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie man eine Funktion in MySQL erstellt, um wiederverwendbare Logik zu kapseln. Der Prozess umfasste die Verbindung zum MySQL-Server, die Erstellung einer Datenbank (falls erforderlich) und die Definition einer Funktion mit Eingabeparametern, einem Rückgabedatentyp und dem Schlüsselwort DETERMINISTIC.

Insbesondere haben Sie die Funktion calculate_rectangle_area erstellt, die die Länge und Breite eines Rechtecks als Eingabe nimmt und dessen Fläche zurückgibt. Der Funktionskörper umfasste die Deklaration einer lokalen Variable zur Speicherung der berechneten Fläche und die Verwendung der RETURN-Anweisung, um das Ergebnis zurückzugeben.

Anschließend haben Sie gelernt, wie Sie diese Funktion in einer SELECT-Abfrage verwenden, um Berechnungen auf Daten durchzuführen, die in einer Tabelle gespeichert sind. Sie haben die Funktion auch mit zusätzlichen Beispieldaten getestet, um deren Genauigkeit sicherzustellen. Schließlich haben Sie gelernt, wie Sie die Funktion und die Tabelle löschen, um Ihre Datenbankumgebung zu bereinigen.

Dieses Lab bot eine praktische Einführung in die Erstellung und Verwendung benutzerdefinierter Funktionen in MySQL, eine wertvolle Fähigkeit zur Kapselung von Logik und zur Verbesserung der Effizienz Ihrer Datenbankoperationen.