Heim > Datenbank > MySQL-Tutorial > Hauptteil

So erstellen Sie eine gespeicherte Prozedur in MySQL

(*-*)浩
Freigeben: 2019-05-11 09:54:51
Original
8356 Leute haben es durchsucht

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.

So erstellen Sie eine gespeicherte Prozedur in MySQL

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]
Nach dem Login kopieren

#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;
Nach dem Login kopieren

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 ;  #将语句的结束符号恢复为分号
Nach dem Login kopieren

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 Prozeduren

Eine 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 |
+-------+
Nach dem Login kopieren

# 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变量的值
Nach dem Login kopieren

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 |
+----------+
Nach dem Login kopieren

#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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage