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. Benutzer können den Namen der gespeicherten Prozedur angeben und Parameter angeben (erforderlich). Ausführung nennen.
Empfohlener Kurs: MySQL-Tutorial.
Vorteile (warum gespeicherte Prozeduren verwenden?):
① Kapseln Sie einige sich stark wiederholende Vorgänge in eine gespeicherte Prozedur und vereinfachen Sie so Aufrufe dieser SQLs
②Stapelverarbeitung: SQL + Schleife, Reduzierung des Datenverkehrs, dh „Ausführen von Stapeln“
③Einheitliche Schnittstelle zur Gewährleistung der Datensicherheit
Im Vergleich zu Oracle In Bezug auf Datenbanken sind die gespeicherten Prozeduren von MySQL haben relativ schwache Funktionen und werden selten verwendet.
1. Erstellung und Aufruf von gespeicherten Prozeduren
>
>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 Datentabellen 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 Ereignisse zu löschen, in denen Ein bestimmter Spieler nimmt am Spiel teil.
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 ; #将语句的结束符号恢复为分号
Analyse:
Standardmäßig 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 vor dem Prozedurnamen hinzu. Erstellen Sie beim Definieren einer Prozedur den Befehl DELIMITER $$, um das Endsymbol der Anweisung vorübergehend in zwei $$ zu ändern dass das im Prozedurkörper verwendete Semikolon direkt an den Server übergeben wird und nicht vom Client (z. B. MySQL) interpretiert wird.
2. Parameter gespeicherter ProzedurenEine gespeicherte Prozedur kann 0 oder mehr Parameter haben, die für die Definition der gespeicherten Prozedur verwendet werden.
3 Parametertypen:
IN-Eingabeparameter: Gibt an, dass der Aufrufer einen Wert an den Prozess übergibt (der eingehende Wert kann ein Literal oder eine Variable sein)
OUT-Ausgabeparameter : Zeigt an, dass der Prozess einen Wert an den Aufrufer übergibt (kann mehrere Werte zurückgeben) (der ausgehende Wert kann nur eine Variable sein)
INOUT-Eingabe- und Ausgabeparameter: Dies bedeutet nicht nur, dass der Aufrufer einen Wert an übergibt Der Prozess bedeutet aber auch, dass der Prozess einen Wert an den Aufrufer oder ausgehenden Wert übergibt (der Wert kann nur eine Variable sein)
1 im Eingabeparameter
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 | +-------+
# Wie zu sehen ist Wie oben dargestellt, wird p_in während des Speichervorgangs geändert, hat jedoch keinen Einfluss auf den Wert von @p_id, da erstere eine lokale Variable und letztere eine globale Variable ist.
2. out-Ausgabeparameter
mysql> delimiter //mysql> create procedure out_param(out p_out int) -> begin -> select p_out; -> set p_out=2; -> select p_out; -> end -> //mysql> delimiter ; mysql> set @p_out=1; mysql> call out_param(@p_out);+-------+ | p_out | +-------+ | NULL | +-------+ #因为out是向调用者输出参数,不接收输入的参数,所以存储过程里的p_out为null+-------+ | p_out | +-------+ | 2 | +-------+mysql> select @p_out;+--------+ | @p_out | +--------+ | 2 | +--------+ #调用了out_param存储过程,输出参数,改变了p_out变量的值
3. inout-Eingabeparameter
mysql> delimiter $$ mysql> create procedure inout_param(inout p_inout int) -> begin -> select p_inout; -> set p_inout=2; -> select p_inout; -> end -> $$ mysql> delimiter ; mysql> set @p_inout=1; mysql> call inout_param(@p_inout);+---------+ | p_inout | +---------+ | 1 | +---------+ +---------+ | p_inout | +---------+ | 2 | +---------+mysql> select @p_inout;+----------+ | @p_inout | +----------+ | 2 | +----------+
#Die gespeicherte Prozedur inout_param wird aufgerufen, akzeptiert die Eingabeparameter, gibt die Parameter aus und ändert die Variablen
Hinweis:
① Wenn der Prozess keine Parameter hat, müssen Sie auch Klammern nach dem Prozessnamen schreiben
Beispiel: CREATE PROCEDURE sp_name ([proc_parameter[,.. .] ]) ...
②Stellen Sie sicher, dass der Name des Parameters nicht mit dem Namen der Spalte übereinstimmt, andernfalls wird der Parametername im Prozedurkörper als Spaltenname behandelt
Dringend empfohlen:
> Verwenden Sie den Parameter „in“ für den Eingabewert; inout-Parameter so wenig wie möglich.
Das obige ist der detaillierte Inhalt vonSo erstellen Sie eine gespeicherte Prozedur in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!