Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Erstellen und Verwenden von gespeicherten MySQL-Prozeduren - Ein Tutorial

Gespeicherte Prozeduren sind benutzerdefinierte SQL-Anweisungen, die in einer MySQL-Datenbank gespeichert und bei Bedarf ausgeführt werden, um eine bestimmte Datenbankoperation auszuführen. Diese vordefinierten Subroutinen helfen beim Verschieben der Geschäftslogik in die Datenbank, was einige Vorteile bietet:

  • Roundtrips zum Datenbankserver durch eine Anwendung werden minimiert.
  • Die Code-Wartbarkeit wurde verbessert, da verschiedene Anwendungen die gespeicherte Prozedur gemeinsam nutzen können.
  • Die Datenbankleistung wird verbessert, da gespeicherte Prozeduren einmal kompiliert und sehr schnell und effizient ausgeführt werden.

In diesem Handbuch werden Sie:

  • Lernen Sie die Syntax zum Erstellen gespeicherter Prozeduren und deklarieren Sie Ihre erste Prozedur.

  • Führen Sie die Beispielprozedur aus, nachdem Sie sie deklariert haben.

  • Erfahren Sie, wie Sie eine Prozedur löschen, wenn Sie sie nicht mehr benötigen.

Bevor Sie beginnen

Stellen Sie sicher, dass Sie Folgendes haben:

  1. Wenn Sie dies noch nicht getan haben, erstellen Sie ein Linode-Konto und eine Compute-Instanz. Sehen Sie sich unsere Leitfäden Erste Schritte mit Linode und Erstellen einer Compute-Instanz an.

  2. Folgen Sie unserem Leitfaden zum Einrichten und Sichern einer Compute-Instanz, um Ihr System zu aktualisieren. Möglicherweise möchten Sie auch die Zeitzone festlegen, Ihren Hostnamen konfigurieren, ein eingeschränktes Benutzerkonto erstellen und den SSH-Zugriff sichern.

  3. Ein MySQL-Server und -Client, der auf dem Linode-Server installiert ist. Installationsanleitungen für MySQL sind für verschiedene Distributionen in unserem MySQL-Bereich verfügbar.

Datenbank vorbereiten

Sie beginnen mit dem Erstellen einer Beispieldatenbank, einer Tabelle und eines Benutzers für den Zugriff auf die Datenbank. Sie werden die Tabelle auch zu Testzwecken mit Beispieldaten füllen.

Erstellen der Datenbank, der Tabelle und des Benutzers

  1. Melden Sie sich beim MySQL-Server an:

     mysql -u root -p
    

    Sie werden aufgefordert, das Root-Passwort Ihrer MySQL-Datenbank einzugeben. Drücken Sie dann Enter um fortzufahren.

  2. Als nächstes sehen Sie eine MySQL-Eingabeaufforderung ähnlich der unten gezeigten.

    mysql >
  3. Geben Sie den folgenden Befehl ein, um eine test_db zu erstellen Datenbank:

    CREATE DATABASE test_db;
    

    Ausgabe:

    Query OK, 1 row affected (0.01 sec)
  4. Erstellen Sie einen Datenbankbenutzer und gewähren Sie vollen Zugriff auf test_db Datenbank. Ersetzen Sie PASSWORD mit einem komplexen und eindeutigen Wert, der den Richtlinien für MySQL-Passwörter entspricht:

    CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'PASSWORD';
    

    Ausgabe:

    Query OK, 1 row affected (0.01 sec)
  5. Gewähren Sie test_user volle Privilegien für die test_db Datenbank;

    GRANT ALL PRIVILEGES ON test_db.* TO 'test_user'@'localhost';
    

    Ausgabe:

    Query OK, 1 row affected (0.01 sec)
  6. Flush-Privilegien:

    FLUSH PRIVILEGES;
    

    Ausgabe:

    Query OK, 0 rows affected (0.01 sec)

Befüllen Sie die Datenbank

  1. Wechseln Sie als Nächstes zur Datenbank test_db:

    USE test_db;
    

    Ausgabe:

    Database changed
  2. Erstellen Sie ein products Tabelle zum Speichern von Beispieldatensätzen:

    CREATE TABLE products(product_id BIGINT PRIMARY KEY, product_name VARCHAR(50), category_name VARCHAR(50) ) ENGINE=INNODB;
    

    Ausgabe:

    Query OK, 0 rows affected (0.01 sec)
  3. Sie können nun einige Produkte zur Produkttabelle hinzufügen, indem Sie die folgenden Befehle nacheinander ausführen:

    INSERT INTO products (product_id, product_name, category_name) VALUES ('1', 'GAMING KEYBOARD', 'COMPUTER ACCESSORIES');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('2', 'OPTICAL MOUSE', 'COMPUTER ACCESSORIES');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('3', 'MOUSE PAD', 'COMPUTER ACCESSORIES');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('4', 'STEREO SYSTEM', 'ELECTRONICS');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('5', '32 INCH TV', 'ELECTRONICS');
    INSERT INTO products (product_id, product_name, category_name) VALUES ('6', 'DVB-T2 RECEIVER', 'ELECTRONICS');
    

    Sie sollten die folgende Ausgabe erhalten, nachdem Sie jedes Insert ausgeführt haben Aussage:

    Query OK, 1 row affected (0.00 sec)
  4. Nächste. Bestätigen Sie, ob die Beispielprodukte erfolgreich in die Datenbank eingefügt wurden, indem Sie Select ausführen Befehl unten:

    SELECT * FROM products;
    

    Ihre Beispielprodukte sollten wie unten gezeigt aufgelistet sein:

    +------------+-----------------+----------------------+
    | product_id | product_name    | category_name        |
    +------------+-----------------+----------------------+
    |          1 | GAMING KEYBOARD | COMPUTER ACCESSORIES |
    |          2 | OPTICAL MOUSE   | COMPUTER ACCESSORIES |
    |          3 | MOUSE PAD       | COMPUTER ACCESSORIES |
    |          4 | STEREO SYSTEM   | ELECTRONICS          |
    |          5 | 32 INCH TV      | ELECTRONICS          |
    |          6 | DVB-T2 RECEIVER | ELECTRONICS          |
    +------------+-----------------+----------------------+
    6 rows in set (0.00 sec)
  5. Beenden Sie den MySQL-Server.

    QUIT;
    

    Ausgabe:

    Bye!
  6. Nachdem Sie eine test_db erstellt haben Datenbank, products Tabelle, ein test_user , und einige Beispielprodukte hinzugefügt haben, können Sie jetzt mit dem Erstellen der ersten gespeicherten Prozedur fortfahren.

Erstellen einer gespeicherten Prozedur

Syntax für gespeicherte Prozeduren

Die grundlegende Syntax zum Erstellen einer gespeicherten Prozedur in einer MySQL-Datenbank ist unten dargestellt:

DELIMITER &&
CREATE PROCEDURE PROCEDURE_NAME (PARAMETER_1, PARAMETER_2, PARAMETER_N...)
BEGIN
[SQL STATEMENT]
END &&
DELIMITER ;
  • Das DELIMITER && Zeile am Anfang weist den MySQL-Server an, die folgenden SQL-Anweisungen als einzelne Anweisung zu behandeln, anstatt sie einzeln auszuführen. Noch ein && wird in einer späteren Zeile eingefügt, um das Ende dieser Anweisung zu markieren.

  • PROCEDURE_NAME Hier wird der Name Ihrer gespeicherten Prozedur deklariert.

  • Auf den Prozedurnamen folgt eine Reihe von Klammern, die die Parameter Ihrer Prozedur einschließen. Gespeicherte Prozeduren unterstützen durch Kommas getrennte Parameter, und diese Funktion macht sie flexibler. Weitere Einzelheiten finden Sie im Parameterabschnitt.

  • Das BEGIN...END Befehle schließen die SQL-Anweisung ein, die von der gespeicherten Prozedur ausgeführt werden soll.

  • Am Ende steht die Anweisung DELIMITER ; wird erneut ausgegeben, um das Trennzeichen wieder auf den Standardwert von ; zu ändern

Parameter gespeicherter Prozeduren

Jeder Parameter für eine Prozedur hat einen Typ, einen Namen und einen Datentyp, getrennt durch Leerzeichen:

PARAMETER_TYPE PARAMETER_NAME DATA_TYPE

Zum Beispiel, um einen Parameter vom Typ IN zu erstellen , benannt category , mit dem VARCHAR Datentyp, der eine Länge von 50 hat Zeichen verwenden Sie diese Syntax:

IN category VARCHAR(50)

MySQL unterstützt drei Arten von Parametern:

  • IN :Der Wert des Parameters muss vom aufrufenden Client angegeben werden. Dieser Wert kann von der gespeicherten Prozedur nicht geändert werden .

    Zum Beispiel, wenn Sie eine MySQL-Sitzungsvariable als IN übergeben Parameter zu einer Prozedur, und die Prozedur ändert diesen Wert in ihren Anweisungen, bleibt Ihre Sitzungsvariable unverändert, nachdem die Prozedur beendet wird.

  • OUT :Dieser Parametertyp wird auch vom aufrufenden Programm angegeben, aber sein Wert kann von der gespeicherten Prozedur geändert und vom aufrufenden Programm abgerufen werden.

    Beachten Sie, dass die gespeicherte Prozedur nicht auf den Anfangswert einer Variablen zugreifen kann, die als OUT übergeben wird Parameter.

  • INOUT :Ein Parameter dieses Typs kombiniert die Verhaltensweisen von IN und OUT Parameter:

    • Die gespeicherte Prozedur kann den Anfangswert des Parameters lesen.

    • Der Parameter kann während der Ausführung der gespeicherten Prozedur geändert werden.

    • Der geänderte Wert kann an das aufrufende Programm zurückgegeben werden, wenn das aufrufende Programm eine Variable als Parameter übergeben hat.

Eine gespeicherte Beispielprozedur

Nachdem Sie die grundlegende Syntax verstanden haben, erstellen wir eine einfache gespeicherte Prozedur, um Produkte nach Kategorienamen zu filtern. Der Kategoriename wird als IN angegeben Parameter.

  1. Melden Sie sich mit dem test_user beim MySQL-Server an Anmeldeinformationen von , die Sie beim Vorbereiten der Datenbank erstellt haben:

     mysql -u test_user -p
    
  2. Geben Sie das Passwort des test_user ein und drücken Sie Enter um fortzufahren.

  3. Sie erhalten einen mysql > prompt. Fahren Sie fort, indem Sie test_db auswählen :

     USE test_db;
    

    Ausgabe:

    Database changed.
  4. Geben Sie dann die folgenden SQL-Befehle ein, um einen filter_by_category zu erstellen gespeicherte Prozedur:

     DELIMITER &&
     CREATE PROCEDURE filter_by_category (IN category VARCHAR(50))
     BEGIN
     SELECT * FROM products WHERE category_name=category;
     END &&
    

    Ausgabe:

    Query OK, 0 rows affected (0.00 sec)
  5. Ändern Sie das DELIMITER zurück zu ;

    DELIMITER ;
    
  6. Wenn der Code zum Erstellen der gespeicherten Prozedur erfolgreich ausgeführt wurde, können Sie jetzt mit der Ausführung der gespeicherten Prozedur fortfahren.

Ausführen einer gespeicherten Prozedur

In diesem Schritt rufen wir die gespeicherte Prozedur auf, die wir oben erstellt haben. Wir werden dieser grundlegenden Syntax folgen:

CALL PROCEDURE_NAME (COMMA-SEPARATED PARAMETER VALUES);
  • Um den filter_by_category auszuführen gespeicherte Prozedur, die wir oben erstellt haben, geben Sie den folgenden Befehl ein:

    CALL filter_by_category('COMPUTER ACCESSORIES');
    

    Die Stored Procedure sollte nun alle Produkte im COMPUTER ACCESSORIES ausgeben Kategorie, da wir COMPUTER ACCESSORIES angegeben haben als Parameter:

    +------------+-----------------+----------------------+
    | product_id | product_name    | category_name        |
    +------------+-----------------+----------------------+
    |          1 | GAMING KEYBOARD | COMPUTER ACCESSORIES |
    |          2 | OPTICAL MOUSE   | COMPUTER ACCESSORIES |
    |          3 | MOUSE PAD       | COMPUTER ACCESSORIES |
    +------------+-----------------+----------------------+
    3 rows in set (0.00 sec)
    
    Query OK, 0 rows affected (0.01 sec)
  • Ebenso können Sie eine Liste aller Produkte aus der ELECTRONICS abrufen Kategorie, indem Sie den folgenden Befehl ausführen.

    CALL filter_by_category('ELECTRONICS') ;
    

    Ausgabe:

    +------------+-----------------+---------------+
    | product_id | product_name    | category_name |
    +------------+-----------------+---------------+
    |          4 | STEREO SYSTEM   | ELECTRONICS   |
    |          5 | 32 INCH TV      | ELECTRONICS   |
    |          6 | DVB-T2 RECEIVER | ELECTRONICS   |
    +------------+-----------------+---------------+
    3 rows in set (0.00 sec)
    
    Query OK, 0 rows affected (0.01 sec)

Unsere gespeicherte Prozedur funktionierte wie erwartet. Als Nächstes lernen wir, wie die gespeicherten Prozeduren gelöscht werden, wenn wir nicht mehr möchten, dass sie erneut ausgeführt werden.

Löschen gespeicherter Prozeduren

Sie können eine gespeicherte MySQL-Prozedur löschen, wenn Sie sie nicht mehr verwenden oder von Grund auf neu erstellen möchten. Die grundlegende Syntax zum Löschen der gespeicherten Prozedur ist unten dargestellt:

DROP PROCEDURE IF EXISTS PROCEDURE_NAME;

Zum Beispiel, um unseren filter_by_category zu löschen gespeicherten Prozedur führen Sie den folgenden MySQL-Befehl aus:

DROP PROCEDURE IF EXISTS filter_by_category;

Wenn die gespeicherte Prozedur vorhanden ist, erhalten Sie die unten gezeigte Ausgabe:

Query OK, 0 rows affected (0.00 sec)

Das ist alles, wenn es darum geht, gespeicherte MySQL-Prozeduren zu erstellen, zu verwenden und zu löschen.

Weitere Informationen

Weitere Informationen zu diesem Thema finden Sie in den folgenden Ressourcen. Obwohl diese in der Hoffnung bereitgestellt werden, dass sie nützlich sind, beachten Sie bitte, dass wir nicht für die Genauigkeit oder Aktualität extern gehosteter Materialien garantieren können.

  • Arbeiten mit gespeicherten MySQL-Prozeduren