Gespeicherte Prozeduren in phpmyadmin erstellen. Gespeicherte MySQL-Prozeduren behandeln effektiv Schläfrigkeit. Entfernen einer gespeicherten Prozedur

Entfernen Sie DEFINER=root@localhost

in lokal, beim Importieren,

es wird abgeschlossen sein.

Könnt ihr mir bezüglich gespeicherter Prozeduren helfen? Wenn ich die gespeicherte Prozedur aus phpmyadmin exportiere, wird sie als aufgeführt

CREATE DEFINER = `root` @ `localhost` PROCEDURE `c4mo_get_cities_prc` (IN `p_state_code` VARCHAR (3), IN `p_country_code` VARCHAR (3), IN `p_lingual_code` VARCHAR (3)) NO SQL BEGIN SELECT city_name, city_code FROM `c4mo_cities` WHERE aktiviert = „Y“ UND language_code = p_lingual_code UND state_code= p_state_code UND country_code= p_country_code ; ENDE

Und wenn ich es aus phpmyadmin importiere, gibt es einen Fehler wie

#1064 – Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie im Handbuch Ihrer MySQL-Serverversion die richtige Syntax für die Verwendung neben „“ in Zeile 13

Dies ist ganz einfach, wenn Sie die phpmyadmin-Schnittstelle verwenden.

Für den Export :

Sie sehen eine normale Registerkarte, da diese Registerkarte nur angezeigt wird, wenn Sie bereits über mindestens eine gespeicherte Prozedur verfügen.

Gehen Sie einfach zur Registerkarte „Routinen“ und Sie sehen Ihre gespeicherte Prozedur (für die von Ihnen erstellte Datenbank).

Aktivieren Sie das Kontrollkästchen unten und exportieren Sie dann. Sie müssen lediglich den gesamten Code kopieren und ihn mit der Datei your_stored_procedure.sql irgendwo auf Ihrem lokalen Computer speichern.

Für den Import:

Wählen Sie einfach die Datenbank aus und importieren Sie die gespeicherte Prozedur your_stored_procedure.sql wie oben beschrieben, da Sie normalerweise die .sql-Datei (Tabellen) für Ihre Datenbank importieren.

Wir arbeiten weiterhin mit der in der vorherigen Datenbank erstellten mytest-Datenbank. Heute werden wir unserer Anwendung die Möglichkeit hinzufügen, auf den Kommentar eines Benutzers zu antworten, und wir lernen auch, wie man einen Kommentar erstellt Gespeicherte Prozeduren und Funktionen.

Erstellen einer gespeicherten Prozedur

Öffnen Sie phpmyadmin. Wählen Sie die mytest-Datenbank aus und klicken Sie auf ihren Titel oder das Durchsuchen-Symbol. Gehen Sie dann zur Registerkarte Routinen und erstellen Sie eine neue Prozedur, indem Sie auf Routine hinzufügen klicken.

Es erscheint ein Formular, das Sie ausfüllen müssen.

Routinename (Prozedur-/Funktionsname) ReplyToComment.

Typ (Typ) - Verfahren. Der Unterschied zwischen einer Prozedur und einer Funktion besteht darin, dass eine Funktion immer einen Wert zurückgibt und eine Return-Anweisung enthält.

Parameter (Parameter) Unsere Prozedur benötigt zwei Parameter: den Text der Antwort und die ID des Kommentars, auf den wir antworten. Beide Parameter werden von unserer Client-Anwendung übergeben.

Verfahrensparameter erstellen

Lassen Sie uns den ersten Parameter erstellen

Richtung Geben Sie die Richtung des Parameters an (IN, OUT, INOUT). In unserem Verfahren sind beide übergebenen Parameter eingehend (IN).

Name (Parametername) Inhalt.

Geben Sie INT, VARCHAR, DATETIME usw. ein. Der Content-Parameter enthält den Text der Antwort, der in der Spalte comment_content gespeichert wird. Diese Spalte hat einen bestimmten Typ. Um ihn zu bestimmen, öffnen Sie die Tabelle „wp_comments“ und gehen Sie zur Registerkarte „Struktur“, suchen Sie den benötigten Spaltennamen und sehen Sie sich seinen Typ in der Spalte „Typ“ an. In diesem Beispiel hat die Spalte einen Texttyp, derselbe Typ muss für unseren Parameter angegeben werden.

Länge/Werte (Länge oder Wert) für den Texttyp: Dieses Feld kann nicht festgelegt werden, aber normalerweise wird hier die Länge angegeben, zum Beispiel VARCHAR(20), INT(10) oder ein Standardwert.

Optionen: Als zusätzliche Optionen können Sie die aktuelle Spaltenkodierung festlegen; diese kann auch auf der Registerkarte „Struktur“ in der Spalte „Sortierung“ angezeigt werden. Setzen wir den Wert auf utf8.

Ergebnis

Fügen wir einen zweiten Parameter hinzu, indem wir auf die Schaltfläche Parameter hinzufügen klicken.

Richtung – IN Name – ComID-Typ – BIGINT Länge/Werte – 20 Optionen – UNSIGNED

Beide Parameter wurden erstellt, wir füllen das Formular weiter aus.

Definition Hier beschreiben wir den Hauptteil des Verfahrens. Der Hauptteil ist ein Block, der mit dem Schlüsselwort BEGIN beginnt und mit dem Schlüsselwort END endet. Innerhalb des Prozedurkörpers können Sie den Abfragetext platzieren, Variablen deklarieren, Verzweigungskonstrukte, Schleifen und vieles mehr verwenden, genau wie in jeder Programmiersprache.

Verfahrensorgan

Erstellen wir zunächst einen Block für den Anfang und das Ende des Hauptteils unserer Prozedur.

ANFANG ENDE;

Fügen wir nun einen Abfragetext hinzu, der die Felder in der wp-comments-Tabelle ausfüllt, wenn ein neuer Kommentar (Antwort) hinzugefügt wird.

BEGIN INSERT INTO wp_comments (comment_author, comment_author_email, comment_content, comment_date, comment_date_gmt, comment_post_id, comment_parent, comment_approved, user_id) VALUES; ENDE;

Wir werden die ersetzten Werte in Variablen speichern. Um eine Variable zu erstellen, verwenden Sie das Schlüsselwort DECLARE und geben Sie dann den Namen, den Typ und die Länge der Variablen an. Sie können auch den Standardwert angeben. Wenn eine Variable einen DEFAULT-Parameter hat, wird die Variable initialisiert.

DECLARE-Namenstyp (Länge) DEFAULT-Standardwert;

Sie können auch mit dem SET-Operator einen Wert für jede Variable festlegen.

SET Variablenname = Wert;

Und so erstellen wir drei Variablen: Author, Email, UsedID, die Werte für die Spalten speichern: comment_author, comment_author_email, user_id.

BEGIN DECLARE Autor tinytext DEFAULT „admin“; DECLARE UserID bigint(20) DEFAULT 1; -- Deklarierte die E-Mail-Variable DECLARE Email varchar(100); -- Legen Sie den Wert der E-Mail-Variable SET Email = " fest. [email protected]"; ENDE;

comment_content In dieser Spalte wird der Text des Kommentars gespeichert, der als Eingabeparameter „Content“ an die Prozedur übergeben wird. Wir werden keine separate Variable erstellen, sondern einfach den Wert des Eingabeparameters in VALUES ersetzen.

comment_date Und comment_date_gmt Beide Spalten haben beim ersten Ausfüllen die gleichen Werte. Erstellen wir eine Datumsvariable und weisen ihr als Wert das Ergebnis zu, das die integrierte NOW-Funktion zurückgibt. Diese Funktion gibt das aktuelle Datum und die aktuelle Uhrzeit im DATETIME-Format zurück.

DECLARE MyCurDate DATETIME DEFAULT NOW();

DECLARE MyCurDate DATETIME; SET MyCurDate = NOW();

comment_approved Ist der Kommentar genehmigt, 1 (Ja), sonst 0. Lassen Sie uns die Variable „Genehmigt“ erstellen, aber bevor wir den Wert festlegen, führen wir eine kleine Überprüfung durch.

DECLARE Genehmigt varchar(20); WENN Autor = „admin“ DANN SET Genehmigt = 1; ELSE SET Genehmigt = 0; ENDIF;

comment_parent Hier müssen Sie als Wert die ID des Kommentars angeben, auf den wir antworten. Die ID wird als zweiter Eingabeparameter an die Prozedur übergeben. Erstellen wir eine Variable ParentCom und weisen ihr den Wert des übergebenen Parameters zu.

DECLARE ParentCom varchar(20); SET ParentCom = ComID ;

Letzter verbleibender Parameter comment_post_id Hier müssen Sie die ID des Beitrags angeben, in dem unser Kommentar veröffentlicht wird. Lassen Sie uns eine Variable namens PostID deklarieren.

DECLARE PostID BIGINT(20);

Zu diesem Zeitpunkt sollte der Hauptteil der Prozedur so aussehen

BEGIN – Variablendeklarationsblock DECLARE Autor tinytext DEFAULT „admin“; DECLARE UserID bigint(20) DEFAULT 1; DECLARE E-Mail varchar(100); DECLARE Date DATETIME DEFAULT NOW(); DECLARE ParentCom varchar(20); DECLARE Genehmigt varchar(20); DECLARE PostID BIGINT(20); -- Variablenwerte festlegen IF Author = „admin“ THEN SET Approved = 1; ELSE SET Genehmigt = 0; ENDIF; SET E-Mail = " [email protected]"; SET ParentCom = ComID ; -- request INSERT INTO wp_comments (comment_author, comment_author_email, comment_content, comment_date, comment_date_gmt, comment_post_id, comment_parent, comment_approved, user_id) VALUES (Autor, E-Mail, Inhalt, Datum, Datum, PostID, ParentCom, Genehmigt, BenutzerID); ENDE;

Vom Autor: Warum schläfst du bei der Arbeit? Sind Sie wach und warten darauf, dass das DBMS die Abfrage ausführt? Es muss also beschleunigt werden. Haben Sie gespeicherte MySQL-Prozeduren verwendet? Sie wissen nicht wie? Dann wachen Sie auf, denn jetzt beschäftigen wir uns mit genau diesem Thema.

Welche weiteren Verfahren gibt es?

Wenn Sie eine Phobie vor medizinischen Eingriffen haben, dann sind diese Strukturen „nicht das richtige Thema“. Sie müssen also keine Angst haben. Aber im Ernst: Gespeicherte Prozeduren sind eine praktische und nützliche Sache für die „Gesundheit“ eines DBMS. Sie werden auch „gespeicherte MySQL-Funktionen“ genannt, dies ist jedoch keine ganz genaue Definition. Lassen Sie uns jedoch alles der Reihe nach erledigen.

Gespeicherte Prozeduren können die Leistung des Servers erheblich optimieren und seine Geschwindigkeit erhöhen, da ihr Code nach der ersten Ausführung im RAM-Cache gespeichert wird. Bei allen nachfolgenden Aufrufen wird die Prozedur aus dem Cache abgerufen und nicht erneut zur Ausführung gesendet.

In MySQL bedeutet der Aufruf einer gespeicherten Prozedur, dass die in ihren Code geschriebenen Abfragen nur zur Hälfte verarbeitet werden. Und nur, wenn die Werte ihrer Parameter geändert werden. Aber nicht alles ist so perfekt. Lassen Sie uns zunächst die positiven Aspekte des Einsatzes von Verfahren beschreiben:

Funktionalitätskapselung – der gesamte Code wird an einem Ort gespeichert, was den Zugriff für andere Anwendungen erleichtert. Auf diese Weise ähneln gespeicherte Prozeduren Programmfunktionen.

Isolierung des Datenzugriffs – nicht alle Benutzer haben Zugriff auf Tabellenzeilen, sondern nur auf gespeicherte Prozeduren. Dadurch erhöht sich wiederum die Sicherheit aller Daten.

Erhöhen der Servergeschwindigkeit durch Zwischenspeichern und Zusammenführen von Anfragen.

In MySQL sind gespeicherte Prozeduren theoretisch Strukturen, die sich auf „höhere Angelegenheiten“ beziehen – die DBMS-Programmierung. Also du und ich (als Profis) zumindest langsam, aber... Aber kehren wir zu den Verfahren zurück und beschreiben die negativen Aspekte ihrer Verwendung:

Die Belastung des Datenbankservers steigt – der Großteil des Prozedurcodes wird serverseitig ausgeführt. Dieses DBMS basiert auf einem Client-Server-Modell, das mehrere Geräte umfasst.

Die Datenmanipulation wird komplizierter – bei der Entwicklung von Anwendungen müssen Sie einen Teil des Codes auf der Clientseite schreiben.

Der Prozess der Übertragung von Datenbanken auf andere Schienen (DBMS) wird immer komplizierter.

Verfahren in phpMyAdmin

Schauen wir uns zunächst die Verwendung gespeicherter Prozeduren in MySQL am Beispiel von phpMyAdmin an. Auf diese Weise wird es für uns einfacher, diese Art von Struktur zu verstehen. Lasst uns beginnen!

Wir starten die Software-Shell und wählen rechts die Testdatenbank aus. Meine Datenbank ist Welt. Gehen Sie dann im Hauptmenü oben auf die Registerkarte „Prozeduren“. Klicken Sie hier auf „Verfahren hinzufügen“.

Danach erscheint das Dialogfeld „Verfahren hinzufügen“. Wir füllen alle im Bild angegebenen Felder aus. Geben Sie den Namen und Typ der Prozedur an. Geben Sie in der Spalte „Definition“ das Benutzerkonto ein und geben Sie in den Kommentaren (optional) an, dass es sich lediglich um ein Beispiel für eine gespeicherte Prozedur handelt.

Bereits in diesem Stadium machen wir uns mit den Besonderheiten der Syntax zum Erstellen gespeicherter MySQL-Prozeduren vertraut. Im Feld „Definition“ schreiben wir den Hauptteil der Struktur. Beachten Sie, dass die ausgeführte Abfrage zwischen den Schlüsselwörtern BEGIN und END liegt:

BEGIN SELECT „HALLO, WORT!“; ENDE

BEGINNEN

WÄHLEN Sie „HALLO, WORT!“ ;

Diese Anfrage führt keine Aktionen mit der Datenbank durch, sondern zeigt lediglich eine Beschriftung an. Wir haben dies im Feld „Zugriff auf SQL-Daten“ angegeben.

Um die Erstellung unserer ersten Prozedur abzuschließen, klicken Sie unten auf „OK“. Danach zeigt das Programm eine „grüne“ Meldung an, die angibt, dass die Anfrage erfolgreich abgeschlossen wurde. Der Code ist unten dargestellt. In MySQL werden gespeicherte Prozeduren und Funktionen mit dem speziellen Befehl CREATE PROCEDURE erstellt. Aber dazu später mehr.

Lassen Sie uns nun die erstellte Struktur zur Ausführung ausführen. Klicken Sie dazu im Abschnitt „Prozeduren“ auf den Link „Ausführen“. Aber was für eine Schande ist das! Wo ist unser Lieblingsgrün geblieben? Warum „schwört“ und „schreit“ das Programm, dass es nicht genügend zugewiesenen Speicher hat?

Wo hat der Autor dieser Publikation gesucht...! Entschuldigung, etwas verwirrt. Schließlich bin ich der Autor. Beruhigen Sie sich, wir regeln jetzt alles! Dieser Fehler tritt auf, weil der Wert des Parameters thread_stack in der Hauptkonfigurationsdatei unverändert bleibt. Standardmäßig werden jedem Stream 128 KB zugewiesen. Das zugewiesene RAM-Limit reicht völlig aus, um einfache Abfragen durchzuführen, aber nicht genug für Prozeduren.

Dies beweist einmal mehr, dass mehr Ressourcen für die Ausführung von Triggern und gespeicherten Prozeduren in MySQL aufgewendet werden.

Gehen Sie zur Konfigurationsdatei my.ini und erhöhen Sie das für jeden Thread festgelegte RAM-Limit auf 256 KB. Führen Sie nun die erstellte Prozedur erneut aus. Diesmal verlief alles wie erwartet und das Programm gab das Ergebnis ohne Fehler zurück.

Bitte beachten Sie, dass der Aufruf mit dem CALL-Befehl unter Angabe des Namens der Prozedur und der akzeptierten Parameter (in Klammern) erfolgt.

Komplexeres Beispiel

Dennoch eignen sich die Funktionen von phpMyAdmin besser zum schnellen Erstellen von Prozeduren. Und um beispielsweise eine gespeicherte Prozedur in MySQL mit einer dynamischen Anzahl von Argumenten zu entwickeln, benötigen Sie eine komfortablere Software. Warum:

phpMyAdmin möchte Prozeduren, die nicht durch einen speziellen Konstruktor erstellt wurden, nicht richtig „verstehen“.

Das Programm führt keine Strukturen aus, die unter Root und mit leerem Passwort gestartet wurden, und in Denver ist das Erstellen eines neuen Benutzers und das Anmelden bei phpMyAdmin unter diesem ein echtes Problem.

Wenn Sie meine Veröffentlichungen aufmerksam verfolgen und alle darin genannten „Wünsche“ erfüllen, dann sollten Sie MySQL Administrator bereits installiert haben. In diesem Zusammenhang müssen Sie lediglich den MySQL Query Browser über diesen Link herunterladen. Es ist besser, diese beiden Programme zusammen zu verwenden: Erstellen Sie Prozeduren im ersten und testen Sie sie im anderen. Gehen:

Gehen Sie oben links auf die Registerkarte „Katalog“.

Wählen Sie die gewünschte Datenbank aus und klicken Sie im oberen Menü auf „Gespeicherte Prozeduren“ und unten auf „Gespeicherte Prozedur erstellen“.

Geben Sie im erscheinenden Editorfenster den Prozedurcode ein und klicken Sie auf „SQL ausführen“.

CREATE DEFINER=`roman`@`localhost` PROCEDURE `proc5`() BEGIN deklariere ein int; set a="SELECT COUNT(*) FROM city as a"; if(a > 1000)THEN SELECT "<1000"; ELSE SELECT ">1000"; ENDE WENN; ENDE

CREATE DEFINER = ` roman ` @ ` localhost ` PROCEDURE ` proc5 ` ()

BEGINNEN

deklariere ein int ;

setze a = „SELECT COUNT(*) FROM Stadt als“;

wenn (a > 1000) DANN

WÄHLEN "<1000" ;

ANDERS

SELECT ">1000" ;

ENDE WENN ;

Möglicherweise ist Ihnen aufgefallen, dass wir innerhalb der Prozedur keine Werte übergeben. Darüber hinaus kann MySQL eine unbekannte Anzahl von Parametern in einer gespeicherten Prozedur enthalten, die dann über neue Variablendeklarationen innerhalb von Schleifen übergeben werden können.

Um den Vorgang zu starten, gehen Sie zum MySQL-Abfragebrowser. Geben Sie zunächst Ihr Konto und Ihr Passwort ein und dann finden wir links im „Objekt-Explorer“ den Ordner mit der erforderlichen Datenbank. Der Rest der Aktionsfolge ist im nächsten Bild dargestellt.

Ausführen einer Prozedur in PHP

Schauen wir uns nun an, wie eine gespeicherte MySQL-Prozedur in PHP aufgerufen wird. Dazu müssen wir den Code unseres vorherigen Beispiels leicht „neu zeichnen“. Wir werden der Prozedur einen Ausgabeparameter hinzufügen und auch den Anforderungscode ändern:

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc6`(out col decimal) BEGIN SELECT COUNT(*) into col FROM city; ENDE

CREATE DEFINER = ` root ` @ ` localhost ` PROCEDURE ` proc6 ` (out col decimal )

BEGINNEN

SELECT COUNT (*) in Spalte FROM Stadt;

Um eine Prozedur aus einer PHP-Datei aufzurufen und das Ergebnis auszugeben, nutzen wir die Fähigkeiten der PDOStatement-Klasse, die speziell für die Arbeit mit der Datenbank über SQL erstellt wurde

Diese Klasse wurde vor relativ kurzer Zeit implementiert und wird seit Version 5.1.0 von PHP unterstützt. Ich empfehle Ihnen, vor der Verwendung die Version der von Ihnen verwendeten Sprache mithilfe der integrierten Funktion phpversion() zu überprüfen.

MySQL 5 verfügt über viele neue Funktionen, eine der wichtigsten davon ist die Erstellung gespeicherter Prozeduren. In diesem Tutorial werde ich darüber sprechen, was sie sind und wie sie Ihnen das Leben erleichtern können.

Einführung

Eine gespeicherte Prozedur ist eine Möglichkeit, sich wiederholende Aktionen zu kapseln. Gespeicherte Prozeduren können Variablen deklarieren, den Datenfluss manipulieren und andere Programmiertechniken verwenden.

Der Grund für ihre Entstehung ist klar und wird durch häufige Verwendung bestätigt. Spricht man dagegen unregelmäßig mit denen, die mit ihnen zusammenarbeiten, spalten sich die Meinungen in zwei völlig gegensätzliche Seiten. Vergiss das nicht.

Hinter

  • Logik mit anderen Anwendungen teilen. Gespeicherte Prozeduren kapseln die Funktionalität. Dies bietet Konnektivität für den Datenzugriff und die Datenverwaltung über verschiedene Anwendungen hinweg.
  • Isolieren von Benutzern von Datenbanktabellen. Dadurch können Sie Zugriff auf gespeicherte Prozeduren gewähren, nicht jedoch auf die Tabellendaten selbst.
  • Bietet einen Schutzmechanismus. Wenn Sie gemäß dem vorherigen Punkt nur über gespeicherte Prozeduren auf Daten zugreifen können, kann niemand sonst Ihre Daten mit dem SQL-Befehl DELETE löschen.
  • Verbesserte Ausführung durch reduzierten Netzwerkverkehr. Mithilfe gespeicherter Prozeduren können mehrere Abfragen kombiniert werden.

Gegen

  • Erhöhte Belastung des Datenbankservers, da die meiste Arbeit auf der Serverseite und weniger auf der Clientseite ausgeführt wird.
  • Du wirst viel lernen müssen. Sie müssen die MySQL-Ausdruckssyntax erlernen, um Ihre gespeicherten Prozeduren schreiben zu können.
  • Sie duplizieren Ihre Anwendungslogik an zwei Stellen: Servercode und Code für gespeicherte Prozeduren, wodurch der Prozess der Datenmanipulation verkompliziert wird.
  • Die Migration von einem DBMS zu einem anderen (DB2, SQL Server usw.) kann zu Problemen führen.

Das Tool, mit dem ich arbeite, heißt MySQL Query Browser und ist ein Standardtool für die Interaktion mit Datenbanken. Das MySQL-Befehlszeilentool ist eine weitere ausgezeichnete Wahl. Der Grund, warum ich Ihnen das erzähle, ist, dass jedermanns Lieblingsprogramm phpMyAdmin die Ausführung gespeicherter Prozeduren nicht unterstützt.

Übrigens verwende ich eine grundlegende Tabellenstruktur, um Ihnen das Verständnis dieses Themas zu erleichtern. Ich spreche von gespeicherten Prozeduren, und sie sind so komplex, dass man sich mit der umständlichen Tabellenstruktur befassen muss.

Schritt 1: Platzieren Sie einen Begrenzer

Ein Trennzeichen ist ein Zeichen oder eine Zeichenfolge, mit dem/der dem MySQL-Client angezeigt wird, dass Sie mit dem Schreiben des SQL-Ausdrucks fertig sind. Seit jeher dient das Semikolon als Trennzeichen. Es können jedoch Probleme auftreten, da eine gespeicherte Prozedur möglicherweise mehrere Ausdrücke enthält, die jeweils mit einem Semikolon enden müssen. In diesem Tutorial verwende ich die Zeichenfolge „//“ als Trennzeichen.

Schritt 2: So arbeiten Sie mit gespeicherten Prozeduren

Erstellen einer gespeicherten Prozedur

DELIMITER // PROZEDUR ERSTELLEN „p2“ () LANGUAGE SQL DETERMINISTISCHER SQL-SICHERHEITSDEFINER KOMMENTAR „Eine Prozedur“ BEGIN SELECT „Hallo Welt!“; ENDE//

Der erste Teil des Codes erstellt eine gespeicherte Prozedur. Der nächste enthält optionale Parameter. Dann kommt der Name und schließlich der Hauptteil des Verfahrens selbst.

Bei Namen gespeicherter Prozeduren muss die Groß-/Kleinschreibung beachtet werden. Sie können auch nicht mehrere Prozeduren mit demselben Namen erstellen. Innerhalb einer gespeicherten Prozedur dürfen keine Ausdrücke vorhanden sein, die die Datenbank selbst ändern.

4 Merkmale einer gespeicherten Prozedur:

  • Sprache: Aus Gründen der Portabilität ist die Standardeinstellung SQL.
  • Deterministisch: wenn die Prozedur immer das gleiche Ergebnis zurückgibt und die gleichen Eingabeparameter verwendet. Dies dient dem Replikations- und Registrierungsprozess. Der Standardwert ist NICHT DETERMINISTISCH.
  • SQL-Sicherheit: Benutzerrechte werden während des Aufrufs überprüft. INVOKER ist der Benutzer, der die gespeicherte Prozedur aufruft. DEFINER ist der „Ersteller“ des Verfahrens. Der Standardwert ist DEFINER.
  • Kommentar: Zu Dokumentationszwecken ist der Standardwert „“

Aufrufen einer gespeicherten Prozedur

Um eine gespeicherte Prozedur aufzurufen, müssen Sie das Schlüsselwort CALL eingeben, gefolgt vom Namen der Prozedur, gefolgt von den Parametern (Variablen oder Werten) in Klammern. Klammern sind erforderlich.

CALL gespeicherter_Prozedurname (param1, param2, ....) CALL procedure1(10 , "string parameter" , @parameter_var);

Ändern einer gespeicherten Prozedur

MySQL verfügt über eine ALTER PROCEDURE-Anweisung zum Ändern von Prozeduren, die jedoch nur zum Ändern bestimmter Merkmale geeignet ist. Wenn Sie die Parameter oder den Hauptteil einer Prozedur ändern müssen, sollten Sie diese löschen und neu erstellen.

Entfernen einer gespeicherten Prozedur

DROP-VERFAHREN, WENN EXISTIERT p2;

Dies ist ein einfacher Befehl. Die IF EXISTS-Anweisung fängt einen Fehler ab, wenn eine solche Prozedur nicht existiert.

Schritt 3: Optionen

Sehen wir uns an, wie wir Parameter an eine gespeicherte Prozedur übergeben können.

  • CREATE PROCEDURE proc1(): leere Parameterliste
  • CREATE PROCEDURE proc1 (IN varname DATA-TYPE): ein Eingabeparameter. Das Wort IN ist optional, da die Standardparameter IN (in) sind.
  • CREATE PROCEDURE proc1 (OUT varname DATA-TYPE): Ein Parameter wurde zurückgegeben.
  • CREATE PROCEDURE proc1 (INOUT varname DATA-TYPE): ein Parameter, sowohl Eingabe als auch Rückgabe.

Selbstverständlich können Sie mehrere Parameter unterschiedlichen Typs angeben.

Beispiel für IN-Parameter

DELIMITER // CREATE PROCEDURE `proc_IN` (IN var1 INT) BEGIN SELECT var1 + 2 AS result; ENDE//

Beispiel-OUT-Parameter

DELIMITER // CREATE PROCEDURE `proc_OUT` (OUT var1 VARCHAR(100)) BEGIN SET var1 = „Dies ist ein Test“; ENDE //

Beispiel für einen INOUT-Parameter

DELIMITER // PROZEDUR ERSTELLEN „proc_INOUT“ (OUT var1 INT) BEGIN SET var1 = var1 * 2; ENDE //

Schritt 4: Variablen

Jetzt zeige ich Ihnen, wie Sie Variablen erstellen und in Prozeduren speichern. Sie müssen sie zusammen mit ihren Datentypen explizit am Anfang des BEGIN/END-Blocks deklarieren. Sobald Sie eine Variable deklariert haben, können Sie sie auf die gleiche Weise wie Sitzungsvariablen, Literale oder Spaltennamen verwenden.

Die Syntax der Variablendeklaration sieht folgendermaßen aus:

DECLARE varname DATA-TYPE DEFAULT defaultvalue;

Lassen Sie uns einige Variablen deklarieren:

DECLARE a, b INT DEFAULT 5; DECLARE str VARCHAR(50); DECLARE heute TIMESTAMP DEFAULT CURRENT_DATE; DECLARE v1, v2, v3 TINYINT;

Arbeiten mit Variablen

Nachdem Sie eine Variable deklariert haben, können Sie ihren Wert mit den Befehlen SET oder SELECT festlegen:

DELIMITER // CREATE PROCEDURE `var_proc` (IN paramstr VARCHAR(20)) BEGIN DECLARE a, b INT DEFAULT 5; DECLARE str VARCHAR(50); DECLARE heute TIMESTAMP DEFAULT CURRENT_DATE; DECLARE v1, v2, v3 TINYINT; INSERT INTO table1 VALUES (a); SET str = „Ich bin ein String“; SELECT CONCAT(str,paramstr), today FROM table2 WHERE b >=5; ENDE //

Schritt 5: Thread-Kontrollstrukturen

MySQL unterstützt IF-, CASE-, ITERATE-, LEAVE LOOP-, WHILE- und REPEAT-Konstrukte zur Steuerung von Threads innerhalb einer gespeicherten Prozedur. Wir werden uns die Verwendung von IF, CASE und WHILE ansehen, da diese am häufigsten verwendet werden.

IF-Design

Mit dem IF-Konstrukt können wir Aufgaben ausführen, die Bedingungen enthalten:

DELIMITER // CREATE PROCEDURE `proc_IF` (IN param1 INT) BEGIN DECLARE variable1 INT; SET Variable1 = Parameter1 + 1; WENN Variable1 = 0 DANN SELECT Variable1; ENDIF; WENN param1 = 0 DANN WÄHLEN Sie „Parameterwert = 0“; ELSE SELECT „Parameterwert<>0"; ENDE WENN; ENDE //

CASE-Design

CASE ist eine weitere Methode zum Testen von Bedingungen und zum Auswählen einer geeigneten Lösung. Dies ist eine großartige Möglichkeit, viele IF-Konstrukte zu ersetzen. Das Konstrukt kann auf zwei Arten beschrieben werden und bietet Flexibilität bei der Verwaltung mehrerer bedingter Ausdrücke.

DELIMITER // CREATE PROCEDURE `proc_CASE` (IN param1 INT) BEGIN DECLARE variable1 INT; SET Variable1 = Parameter1 + 1; CASE variable1 WHEN 0 THEN INSERT INTO table1 VALUES (param1); WHEN 1 THEN INSERT INTO table1 VALUES (variable1); ELSE INSERT INTO table1 VALUES (99); ENDGEHÄUSE; ENDE //

DELIMITER // CREATE PROCEDURE `proc_CASE` (IN param1 INT) BEGIN DECLARE variable1 INT; SET Variable1 = Parameter1 + 1; CASE WHEN variable1 = 0 THEN INSERT INTO table1 VALUES (param1); WHEN variable1 = 1 THEN INSERT INTO table1 VALUES (variable1); ELSE INSERT INTO table1 VALUES (99); ENDGEHÄUSE; ENDE //

WHILE-Design

Technisch gesehen gibt es drei Arten von Schleifen: die WHILE-Schleife, die LOOP-Schleife und die REPEAT-Schleife. Sie können eine Schleife auch mithilfe der Programmiertechnik von Darth Vader durchführen: GOTO-Anweisungen. Hier ist eine Beispielschleife:

DELIMITER // CREATE PROCEDURE `proc_WHILE` (IN param1 INT) BEGIN DECLARE variable1, variable2 INT; SET-Variable1 = 0; WHILE-Variable1< param1 DO INSERT INTO table1 VALUES (param1); SELECT COUNT(*) INTO variable2 FROM table1; SET variable1 = variable1 + 1; END WHILE; END //

Schritt 6: Cursor

Cursor werden verwendet, um die von einer Abfrage zurückgegebenen Zeilen zu durchlaufen und jede Zeile zu verarbeiten.

MySQL unterstützt Cursor in gespeicherten Prozeduren. Hier ist eine kurze Syntax zum Erstellen und Verwenden eines Cursors.

DECLARE Cursorname CURSOR FOR SELECT ...; /*Einen Cursor deklarieren und füllen */ DECLARE CONTINUE HANDLER FOR NOT FOUND /*Was tun, wenn keine Datensätze mehr vorhanden sind*/ OPEN Cursor-Name; /*Cursor öffnen*/ FETCH Cursorname INTO Variable [, Variable]; /*Weisen Sie einer Variablen einen Wert zu, der dem aktuellen Wert der Spalte entspricht*/ CLOSE Cursor-Name; /*Cursor schließen*/

In diesem Beispiel führen wir einige einfache Operationen mit einem Cursor aus:

DELIMITER // PROZEDUR ERSTELLEN „proc_CURSOR“ (OUT param1 INT) BEGIN DECLARE a, b, c INT; DECLARE cur1 CURSOR FOR SELECT col1 FROM table1; DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1; OFFEN cur1; SET b = 0; SET c = 0; WHILE b = 0 DO FETCH cur1 INTO a; WENN b = 0, DANN SETZE c = c + a; ENDIF; ENDE WÄHREND; SCHLIEßEN cur1; SET param1 = c; ENDE //

Cursor haben drei Eigenschaften, die Sie verstehen müssen, um unerwartete Ergebnisse zu vermeiden:

  • Nicht empfindlich: Ein einmal geöffneter Cursor spiegelt keine Änderungen in der Tabelle wider, die später auftreten. In Wirklichkeit garantiert MySQL nicht, dass der Cursor aktualisiert wird. Verlassen Sie sich also nicht darauf.
  • Schreibgeschützt: Cursor können nicht geändert werden.
  • Kein Zurückspulen: Der Cursor kann sich nur in eine Richtung bewegen – vorwärts. Sie können keine Zeilen überspringen, ohne sie auszuwählen.

Abschluss

In diesem Tutorial habe ich Ihnen die Grundlagen der Arbeit mit gespeicherten Prozeduren und einige der damit verbundenen spezifischen Eigenschaften vorgestellt. Natürlich müssen Sie Ihr Wissen in Bereichen wie Sicherheit, SQL-Ausdrücken und Optimierung vertiefen, bevor Sie ein echter MySQL-Prozedur-Guru werden.

Sie sollten die Vorteile der Verwendung gespeicherter Prozeduren in Ihrer spezifischen Anwendung berechnen und dann nur die erforderlichen Prozeduren erstellen. Im Allgemeinen verwende ich Prozeduren; Meiner Meinung nach lohnt es sich, sie aufgrund ihrer Sicherheit, Codepflege und des Gesamtdesigns in Projekte zu implementieren. Bedenken Sie außerdem, dass MySQL-Prozeduren noch in Arbeit sind. Erwarten Sie Verbesserungen hinsichtlich Funktionalität und Verbesserungen. Teilen Sie uns gerne Ihre Meinung mit.

Lesen Sie auch: