Es gibt drei Parametertypen für gespeicherte MySQL-Prozeduren: 1. Eingabeparameter, identifiziert durch das Schlüsselwort „IN“, können an eine gespeicherte Prozedur übergeben werden. 2. Ausgabeparameter, identifiziert durch das Schlüsselwort „OUT“, werden verwendet, wenn die Die gespeicherte Prozedur muss die Situation eines Operationsergebnisses zurückgeben. 3. Eingabe- und Ausgabeparameter, markiert mit dem Schlüsselwort „INOUT“.
Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.
Gespeicherte Prozedur:
Eine Reihe programmierbarer Funktionen, bei denen es sich um eine Reihe von SQL-Anweisungen zur Ausführung bestimmter Funktionen handelt. Sie werden kompiliert, erstellt und in der Datenbank gespeichert und Aufrufausführung mit Argumenten (bei Bedarf).
Vorteile (warum gespeicherte Prozeduren verwenden?):
①Kapseln Sie einige sich stark wiederholende Vorgänge in einer gespeicherten Prozedur und vereinfachen Sie so die Aufrufe dieser SQL
②Stapelverarbeitung: SQL + Schleife, reduzieren Sie den Datenverkehr, das heißt, „Batches ausführen“
③Einheitliche Schnittstelle zur Gewährleistung der Datensicherheit
Im Vergleich zur Oracle-Datenbank haben die gespeicherten Prozeduren von MySQL eine relativ schwache Funktion und werden weniger verwendet.
1. Erstellung und Aufruf von gespeicherten Prozeduren
>Eine gespeicherte Prozedur ist ein Codestück mit einem Namen, der zum Ausführen einer bestimmten Funktion verwendet wird.
>Die erstellte gespeicherte Prozedur wird im Datenwörterbuch der Datenbank gespeichert.
1. Erstellen Sie eine gespeicherte Prozedur
CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body proc_parameter: [ IN | OUT | INOUT ] param_name type characteristic: COMMENT 'string' | LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } routine_body: Valid SQL routine statement [begin_label:] BEGIN [statement_list] …… END [end_label]
#Erstellen Sie eine Datenbank und sichern Sie die Datentabelle für Beispieloperationen
mysql> create database db1; mysql> use db1; mysql> create table PLAYERS as select * from TENNIS.PLAYERS; mysql> create table MATCHES as select * from TENNIS.MATCHES;
Beispiel: Erstellen Sie eine gespeicherte Prozedur, um alle von einem bestimmten Spieler gespielten Spiele zu löschen
Standardsituation Unter ist die gespeicherte Prozedur mit der Standarddatenbank verknüpft. Wenn Sie angeben möchten, dass die gespeicherte Prozedur unter einer bestimmten Datenbank erstellt wird, fügen Sie den Datenbanknamen als Präfix vor dem Prozedurnamen hinzu Beim Definieren Verwenden Sie für die Prozedur den Befehl DELIMITER $$, um die Anweisung zu ändern. Das Endsymbol wird vorübergehend vom Semikolon in zwei $$ geändert, sodass das im Prozedurhauptteil verwendete Semikolon direkt an den Server übergeben wird, ohne vom Client interpretiert zu werden (z. B als MySQL).2. Rufen Sie die gespeicherte Prozedur auf: call sp_name[(Parameter übergeben)];
mysql> delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义) mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER) -> BEGIN -> DELETE FROM MATCHES -> WHERE playerno = p_playerno; -> END$$ Query OK, 0 rows affected (0.01 sec) mysql> delimiter ; #将语句的结束符号恢复为分号
3. Hauptteil der gespeicherten Prozedur
> Anweisungen zum Deklarieren von Variablen. Wait
>Format des Prozedurkörpers: Beginnen Sie mit „begin“ und enden Sie mit „end“ (kann verschachtelt werden)mysql> select * from MATCHES; +---------+--------+----------+-----+------+ | MATCHNO | TEAMNO | PLAYERNO | WON | LOST | +---------+--------+----------+-----+------+ | 1 | 1 | 6 | 3 | 1 | | 7 | 1 | 57 | 3 | 0 | | 8 | 1 | 8 | 0 | 3 | | 9 | 2 | 27 | 3 | 2 | | 11 | 2 | 112 | 2 | 3 | +---------+--------+----------+-----+------+ 5 rows in set (0.00 sec) mysql> call delete_matches(57); Query OK, 1 row affected (0.03 sec) mysql> select * from MATCHES; +---------+--------+----------+-----+------+ | MATCHNO | TEAMNO | PLAYERNO | WON | LOST | +---------+--------+----------+-----+------+ | 1 | 1 | 6 | 3 | 1 | | 8 | 1 | 8 | 0 | 3 | | 9 | 2 | 27 | 3 | 2 | | 11 | 2 | 112 | 2 | 3 | +---------+--------+----------+-----+------+ 4 rows in set (0.00 sec)
4. Label-Anweisungsblöcke
BEGIN BEGIN BEGIN statements; END END END
[begin_label:] BEGIN [statement_list] END [end_label]
Gespeicherte Prozeduren können 0 oder mehr Parameter haben, die für die Definition gespeicherter Prozeduren verwendet werden.
Gespeicherte MySQL-Prozeduren unterstützen drei Arten von Parametern, nämlich Eingabeparameter, Ausgabeparameter und Eingabe-/Ausgabeparameter, die jeweils durch die drei Schlüsselwörter IN, OUT und INOUT identifiziert werden.Unter diesen können Eingabeparameter an eine gespeicherte Prozedur übergeben werden, Ausgabeparameter werden verwendet, wenn die gespeicherte Prozedur ein Operationsergebnis zurückgeben muss, und Eingabe-/Ausgabeparameter können sowohl als Eingabeparameter als auch als Ausgabeparameter dienen.3 Parametertypen:
IN-Eingabeparameter: zeigt an, dass der Aufrufer einen Wert an den Prozess übergibt (der eingehende Wert kann ein Literal oder eine Variable sein)
label1: BEGIN label2: BEGIN label3: BEGIN statements; END label3 ; END label2; END label1
mysql> delimiter $$ mysql> create procedure in_param(in p_in int) -> begin -> select p_in; -> set p_in=2; -> select P_in; -> end$$ mysql> delimiter ; mysql> set @p_in=1; mysql> call in_param(@p_in); +------+ | p_in | +------+ | 1 | +------+ +------+ | P_in | +------+ | 2 | +------+ mysql> select @p_in; +-------+ | @p_in | +-------+ | 1 | +-------+ #以上可以看出,p_in在存储过程中被修改,但并不影响@p_id的值,因为前者为局部变量、后者为全局变量。
Hinweis: ①Wenn der Prozess keine Parameter hat, muss er auch Klammern nach dem Prozedurnamen schreiben
Beispiel: CREATE PROCEDURE sp_name ([proc_parameter[,...]]) …… ②Stellen Sie sicher, dass die Der Name des Parameters ist nicht gleich dem Namen der Spalte, andernfalls wird der Parametername im Prozedurkörper wie folgt angezeigt: Behandle ihn als Spaltennamen
[Verwandte Empfehlung: MySQL-Video-Tutorial]
Das obige ist der detaillierte Inhalt vonWelche Parametertypen gibt es in gespeicherten MySQL-Prozeduren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!