Heim >Datenbank >MySQL-Tutorial >Wozu dienen gespeicherte MySQL-Prozeduren?
Die Funktionen gespeicherter MySQL-Prozeduren: 1. Vereinfachen Sie komplexe Vorgänge durch Kapselung der Verarbeitung in benutzerfreundlichen Einheiten; 3. Helfen Sie, den Datenverkehr zwischen der Anwendung und zu reduzieren; der Datenbankserver, da die Anwendung nicht mehrere lange SQL-Anweisungen senden muss, sondern nur den Namen und die Parameter der gespeicherten Prozedur 5. Dies kann die Funktionalität und Flexibilität von SQL-Anweisungen verbessern, sodass MySQL komplexe und komplexere Urteile vervollständigen kann 6. Es kann die Sicherheit der Datenbank und die Integrität der Daten usw. verbessern.
Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.
Eine gespeicherte Prozedur ist eine Reihe von SQL-Anweisungen, die dazu dienen, eine bestimmte Funktion auszuführen. Der Zweck der Verwendung gespeicherter Prozeduren besteht darin, allgemeine oder komplexe Arbeiten mit SQL-Anweisungen vorab zu schreiben und sie unter einem angegebenen Namen zu speichern. Diese Prozedur wird kompiliert und optimiert und auf dem Datenbankserver gespeichert, daher wird sie als gespeicherte Prozedur bezeichnet. Wenn die Datenbank in Zukunft denselben Dienst wie die definierte gespeicherte Prozedur bereitstellen muss, müssen Sie nur „CALL Stored Procedure Name“ aufrufen, um ihn automatisch abzuschließen.
SQL-Anweisungen, die häufig zum Betrieb von Datenbanken verwendet werden, müssen zuerst kompiliert und dann ausgeführt werden. Gespeicherte Prozeduren verfolgen einen anderen Ansatz zum Ausführen von SQL-Anweisungen.
Eine gespeicherte Prozedur ist eine programmierbare Funktion, die in der Datenbank erstellt und gespeichert wird. Sie besteht im Allgemeinen aus SQL-Anweisungen und einigen speziellen Kontrollstrukturen. Gespeicherte Prozeduren eignen sich besonders dann, wenn Sie dieselbe spezifische Funktion auf verschiedenen Anwendungen oder Plattformen ausführen möchten.
Die Verwendung gespeicherter Prozeduren kann nicht nur die Effizienz des Datenbankzugriffs verbessern, sondern auch die Sicherheit der Datenbanknutzung verbessern. Für den Aufrufer kapselt die gespeicherte Prozedur die SQL-Anweisung, und der Aufrufer muss den spezifischen Implementierungsprozess der logischen Funktion nicht berücksichtigen. Es ist nur ein einfacher Aufruf und kann aus Programmiersprachen wie Java und C# aufgerufen werden. Die Rolle (Vorteile) gespeicherter ProzedurenMySQL 5.0-Version unterstützte zuvor keine gespeicherten Prozeduren, was die Anwendung von MySQL stark einschränkte. MySQL unterstützt gespeicherte Prozeduren seit Version 5.0, was nicht nur die Verarbeitungsgeschwindigkeit der Datenbank verbessert, sondern auch die Flexibilität der Datenbankprogrammierung verbessert. Gespeicherte Prozeduren sind eine wichtige Funktion in der Datenbank. Gespeicherte Prozeduren können zum Konvertieren von Daten und zur Datenmigration verwendet werden , Das Erstellen von Berichten ähnelt einer Programmiersprache. Nach erfolgreicher Ausführung kann sie jederzeit aufgerufen werden, um bestimmte Funktionsvorgänge abzuschließen.
Vereinfachung komplexer Vorgänge durch Kapselung der Verarbeitung in benutzerfreundlichen Einheiten;
Daten unabhängig machen
Der Aufbau gespeicherter Prozeduren erschwert die Entwicklung gespeicherter Prozeduren mit komplexer Geschäftslogik.
Es ist schwierig, gespeicherte Prozeduren zu debuggen. Nur wenige Datenbankverwaltungssysteme ermöglichen das Debuggen gespeicherter Prozeduren. Leider bietet MySQL keine Möglichkeit, gespeicherte Prozeduren zu debuggen.
Die Entwicklung und Wartung gespeicherter Prozeduren ist nicht einfach. Die Entwicklung und Wartung gespeicherter Prozeduren erfordert häufig spezielle Fähigkeiten, über die nicht alle Anwendungsentwickler verfügen. Dies kann während der Anwendungsentwicklungs- und Wartungsphasen zu Problemen führen.
Gespeicherte Prozeduren erstellen, der Code lautet wie folgt:
-- 创建存储过程 create procedure mypro(in a int,in b int,out sum int) begin set sum = a+b; end;
Die laufenden Ergebnisse sind wie folgt
Das ist auch möglich sein Wird im Navicat-Client verwendet. Sehen Sie sich den Prozess unter dem Knoten „Funktion“ an, wie in der folgenden Abbildung dargestellt:
Rufen Sie die gespeicherte Prozedur auf. Der Code lautet wie folgt:
call mypro(1,2,@s);-- 调用存储过程 select @s;-- 显示过程输出结果
Laufergebnisse
create procedure
wird zum Erstellen einer Prozedur verwendet; create procedure
用来创建过程;mypro
用来定义过程名称;(in a int,in b int,out sum int)
表示过程的参数,其中 in
表示输入参数,out
表示输出参数。类似于 Java 定义方法时的形参和返回值;begin
与end
表示过程主体的开始和结束,相当于 Java 定义方法的一对大括号;call
用来调用过程,@s
是用来接收过程输出参数的变量MySQL 存储过程的参数用在存储过程的定义,共有三种参数类型:
IN
输入参数:表示调用者向过程传入值(传入值可以是字面量或变量);OUT
输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量);INOUT
输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)。存储过程根据参数可分为四种类别:
1).没有参数的过程;
2).只有输入参数的过程;
3).只有输出参数的过程;
4).包含输入和输出参数的过程。
MySQL 中的存储过程类似 java 中的方法。
既然如此,在存储过程中也同样可以使用变量。java 中的局部变量作用域是变量所在的方法,而 MySQL 中的局部变量作用域是所在的存储过程。
DECLARE variable_name [,variable_name...] datatype [DEFAULT value];
declare
用于声明变量;
variable_name
表示变量名称;
datatype
为 MySQL 的数据类型;
default
用于声明默认值;
例如:
declare name varchar(20) default ‘jack’。
SET 变量名 = 表达式值 [,variable_name = expression ...]
在存储过程中使用变量,代码如下所示
use schooldb;-- 使用 schooldb 数据库 -- 创建过程 create procedure mypro1() begin declare name varchar(20); set name = '丘处机'; select * from studentinfo where studentname = name; end; -- 调用过程 call mypro1();
运行结果
IF
语句包含多个条件判断,根据结果为 TRUE
、FALSE
执行语句,与编程语言中的 if
、else if
、else
语法类似。
定义存储过程,输入一个整数,使用 if 语句判断是正数还是负数,代码如下所示:
-- 创建过程 create procedure mypro2(in num int) begin if num<p>运行结果</p><p><img src="https://img.php.cn/upload/article/000/000/024/fe178bfb1a0eb7dd09df67d79c722d95-4.png" alt="Wozu dienen gespeicherte MySQL-Prozeduren?"></p><h4> <a id="case__169"></a><strong>case 条件语句</strong> </h4><p><code>case</code>是另一个条件判断的语句,类似于编程语言中的 <code>choose</code>、<code>when</code>语法。MySQL 中的 <code>case</code><br><code>mypro</code> wird zum Definieren des Prozedurnamens verwendet; </p><p><code>(in a int, in b int, out sum int)</code> bedeutet Parameter des Prozesses, wobei <code>in</code> Eingabeparameter und <code>out</code> Ausgabeparameter darstellt. Ähnlich wie die formalen Parameter und Rückgabewerte beim Definieren von Methoden in Java stellen <code>begin</code> und <code>end</code> den Anfang und das Ende des Prozesskörpers dar, was einem Paar entspricht Klammern beim Definieren von Methoden in Java;</p><p><code>call</code> wird zum Aufrufen der Prozedur verwendet, <code>@s</code> ist die Variable, die zum Empfangen der Prozessausgabeparameter verwendet wird</p><p><img src="https://img.php.cn/upload/article/000/000/024/fcb90e661eadc288d2d1d57364b7978a-5.png" alt="Wozu dienen gespeicherte MySQL-Prozeduren?"><a id="_70"></a></p><p>Parameter für gespeicherte Prozeduren </p><p></p><blockquote>MySQL-Parameter für gespeicherte Prozeduren werden bei der Definition gespeicherter Prozeduren verwendet. Es gibt drei Parametertypen: 🎜</blockquote>🎜🎜<code>IN</code> Eingabe Parameter: Gibt an, dass der Aufrufer einen Wert an die Prozedur übergibt (der eingehende Wert kann ein Literal oder eine Variable sein); 🎜🎜<code>OUT</code> 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) ;🎜🎜<code>INOUT</code>Eingabe- und Ausgabeparameter: Dies bedeutet, dass der Aufrufer einen Wert an den Prozess übergibt, und es bedeutet, dass der Prozess einen übergibt Wert an den Aufrufer (der Wert kann nur eine Variable sein). 🎜🎜🎜Gespeicherte Prozeduren können basierend auf Parametern in vier Kategorien unterteilt werden: 🎜🎜2). .Eine Prozedur, die Eingabe- und Ausgabeparameter enthält. 🎜🎜<a id="_88">🎜🎜Variablen🎜🎜🎜Die gespeicherten Prozeduren in MySQL ähneln den Methoden in Java. 🎜🎜In diesem Fall können Variablen auch in gespeicherten Prozeduren verwendet werden. Der Bereich lokaler Variablen in Java ist die Methode, in der sich die Variable befindet, während der Bereich lokaler Variablen in MySQL die gespeicherte Prozedur ist, in der sie sich befindet. 🎜🎜</a><a id="_94">🎜🎜Variablendefinition🎜🎜<pre class="brush:php;toolbar:false">-- 创建过程 create procedure mypro3(in num int) begin case -- 条件开始 when num🎜🎜🎜<code>declare</code> wird zum Deklarieren von Variablen verwendet; 🎜🎜🎜🎜<code>variable_name</code> stellt den Variablennamen dar ; 🎜🎜🎜<code>datatype</code> ist der Datentyp von MySQL; 🎜🎜🎜🎜Zum Beispiel: 🎜<pre class="brush:php;toolbar:false">-- 创建过程 create procedure mypro4(in num int) begin case num -- 条件开始 when 1 then select '数值是 1'; when 2 then select '数值是 2'; else select '不是 1 也不是 2'; end case; -- 条件结束 end; -- 调用过程 call mypro4(3);🎜🎜 🎜🎜🎜Variablenzuweisung🎜🎜
-- 创建过程 create procedure mypro5(out sum int) begin declare num int default 0; set sum = 0; while num🎜Verwenden Sie Variablen in der gespeicherten Prozedur, der Code lautet wie folgt🎜<pre class="brush:php;toolbar:false">-- 创建过程 create procedure mypro6(out sum int) begin declare num int default 0; set sum = 0; repeat-- 循环开始 set num = num+1; set sum = sum+num; until num>=10 end repeat; -- 循环结束 end; -- 调用过程 call mypro6(@sum); -- 查询变量值 select @sum;🎜Ergebnisse ausführen🎜🎜🎜🎜🎜🎜Flusskontrollanweisung🎜🎜
IF
-Anweisung enthält mehrere bedingte Beurteilungen. Die Anweisung wird basierend auf dem Ergebnis TRUE
, FALSE
ausgeführt Ähnlich wie if
in Programmiersprachen >, else if
, else
haben eine ähnliche Syntax. 🎜🎜Definieren Sie die gespeicherte Prozedur, geben Sie eine Ganzzahl ein und verwenden Sie die if-Anweisung, um zu bestimmen, ob es sich um eine positive oder negative Zahl handelt. Der Code lautet wie folgt: 🎜-- 创建过程 create procedure mypro7(out sum int) begin declare num int default 0; set sum = 0; loop_sum:loop-- 循环开始 set num = num+1; set sum = sum+num; if num>=10 then leave loop_sum; end if; end loop loop_sum; -- 循环结束 end; -- 调用过程 call mypro7(@sum); -- 查询变量值 select @sum;🎜Laufergebnisse🎜🎜🎜
case code> ist eine weitere bedingte Anweisung, ähnlich der Syntax <code>choose
und when
in Programmiersprachen. Die case
-Anweisung in MySQL hat zwei Syntaxformate 🎜. 🎜🎜Definieren Sie eine gespeicherte Prozedur, geben Sie eine Ganzzahl ein und verwenden Sie eine Case-Anweisung, um zu bestimmen, ob es sich um eine positive oder negative Zahl handelt. Der Code lautet wie folgt: 🎜SHOW PROCEDURE STATUS;🎜Ergebnisse ausführen🎜🎜🎜🎜🎜Definieren Sie eine gespeicherte Prozedur, geben Sie eine ein Ganzzahl, und verwenden Sie eine Case-Anweisung, um zu bestimmen, ob es 1 oder 2 ist. Der Code lautet wie folgt: 🎜
SHOW PROCEDURE status where db = 'schooldb';🎜Laufergebnisse🎜
两种 case 语法都可以实现条件判断,但第一种适合范围值判断,而第二种适合确定值判断。
while
语句的用法和 java
中的 while
循环类似。
定义存储过程,使用 while 循环输出 1 到 10 的累加和,代码如下所示:
-- 创建过程 create procedure mypro5(out sum int) begin declare num int default 0; set sum = 0; while num<p>运行结果</p><p><img src="https://img.php.cn/upload/article/000/000/024/fcb90e661eadc288d2d1d57364b7978a-7.png" alt="Wozu dienen gespeicherte MySQL-Prozeduren?"></p><h4> <a id="repeat__243"></a><strong>repeat 循环语句</strong> </h4><p><code>repeat</code>语句的用法和 <code>java</code>中的 <code>do…while</code> 语句类似,都是先执行循环操作,再判断条件,区别是 <code>repeat</code>表达<br> 式值为 <code>false</code>时才执行循环操作,直到表达式值为 <code>true</code>停止。</p><p>定义存储过程,使用 repeat 循环输出 1 到 10 的累加和,代码如下所示:</p><pre class="brush:php;toolbar:false">-- 创建过程 create procedure mypro6(out sum int) begin declare num int default 0; set sum = 0; repeat-- 循环开始 set num = num+1; set sum = sum+num; until num>=10 end repeat; -- 循环结束 end; -- 调用过程 call mypro6(@sum); -- 查询变量值 select @sum;
运行结果
循环语句,用来重复执行某些语句。
执行过程中可使用 leave
语句或 iterate
跳出循环,也可以嵌套 IF
等判断语句。
leave
语句效果相当于 java 中的 break
,用来终止循环;iterate
语句效果相当于 java 中的 continue
,用来结束本次循环操作,进入下一次循环。定义存储过程,使用 loop 循环输出 1 到 10 的累加和,代码如下所示:
-- 创建过程 create procedure mypro7(out sum int) begin declare num int default 0; set sum = 0; loop_sum:loop-- 循环开始 set num = num+1; set sum = sum+num; if num>=10 then leave loop_sum; end if; end loop loop_sum; -- 循环结束 end; -- 调用过程 call mypro7(@sum); -- 查询变量值 select @sum;
运行结果
代码中的 loop_sum 相当于给循环贴个标签,方便多重循环时灵活操作。
存储过程的管理主要包括:显示过程、显示过程源码、删除过程。
比较简单的方式就是利用 navicat 客户端工具进行管理,鼠标点击操作即可,如下图所示:
SHOW PROCEDURE STATUS;
SHOW PROCEDURE status where db = 'schooldb';
SHOW PROCEDURE status where name like '%my%';
SHOW CREATE PROCEDURE mypro1;
drop PROCEDURE mypro1;
【相关推荐:mysql视频教程】
Das obige ist der detaillierte Inhalt vonWozu dienen gespeicherte MySQL-Prozeduren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!