Heim  >  Artikel  >  Datenbank  >  Wozu dienen gespeicherte MySQL-Prozeduren?

Wozu dienen gespeicherte MySQL-Prozeduren?

青灯夜游
青灯夜游Original
2023-04-04 15:43:072664Durchsuche

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.

Wozu dienen gespeicherte MySQL-Prozeduren?

Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.

Einführung in gespeicherte Prozeduren

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.

MySQL 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.

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 Prozeduren

Vereinfachung komplexer Vorgänge durch Kapselung der Verarbeitung in benutzerfreundlichen Einheiten;
  • Vereinfachung der Änderungsverwaltung. Wenn sich der Tabellenname, der Spaltenname oder die Geschäftslogik ändert. Es muss nur der Code der gespeicherten Prozedur geändert werden, die Benutzer ändern nicht ihren eigenen Code
  • Normalerweise tragen gespeicherte Prozeduren dazu bei, die Leistung der Anwendung zu verbessern. Wenn die erstellte gespeicherte Prozedur kompiliert wird, wird sie in der Datenbank gespeichert. Allerdings implementiert MySQL gespeicherte Prozeduren etwas anders. Gespeicherte MySQL-Prozeduren werden bei Bedarf kompiliert. Nachdem die gespeicherte Prozedur kompiliert wurde, legt MySQL sie im Cache ab. MySQL verwaltet für jede Verbindung einen eigenen Cache mit gespeicherten Prozeduren. Wenn die Anwendung die gespeicherte Prozedur mehrmals in einer einzelnen Verbindung verwendet, verwenden Sie die kompilierte Version. Andernfalls funktioniert die gespeicherte Prozedur wie eine Abfrage.
  • Gespeicherte Prozeduren tragen dazu bei, den Datenverkehr zwischen der Anwendung und dem Datenbankserver zu reduzieren, da die Anwendung dies tut Es müssen nicht mehrere lange SQL-Anweisungen gesendet werden, sondern nur der Name und die Parameter der gespeicherten Prozedur Flexibilität kann komplexe Urteile und komplexere Vorgänge vervollständigen.
  • Verbessern Sie die Sicherheit der Datenbank und die Integrität der Daten.
  • Eine Möglichkeit, die Sicherheit gespeicherter Prozeduren zu verbessern, besteht darin, sie als Zwischenkomponenten zu verwenden. In den gespeicherten Prozeduren können Sie verwandte Vorgänge für bestimmte Tabellen ausführen dann werden die gespeicherten Prozeduren als Schnittstellen bereitgestellt. Auf diese Weise können externe Programme die Datenbanktabelle nicht direkt bedienen, sondern die entsprechende Tabelle nur über gespeicherte Prozeduren bedienen. Daher kann die Sicherheit bis zu einem gewissen Grad verbessert werden.


    Daten unabhängig machen

  • Datenunabhängigkeit kann den Effekt der Entkopplung erzielen, das heißt, das Programm kann gespeicherte Prozeduren aufrufen, anstatt mehrere SQL-Anweisungen auszuführen. In diesem Fall isoliert die gespeicherte Prozedur die Daten vom Benutzer. Der Vorteil besteht darin, dass das Programm beim Aufrufen der Tabelle nicht geändert werden muss. Der Datenbankadministrator muss lediglich die gespeicherte Prozedur neu schreiben .
  • Nachteile gespeicherter Prozeduren
  • Wenn Sie eine große Anzahl gespeicherter Prozeduren verwenden, erhöht sich die Speichernutzung jeder Verbindung, die diese gespeicherten Prozeduren verwendet, erheblich. Wenn Sie außerdem eine große Anzahl logischer Operationen in der gespeicherten Prozedur verwenden, erhöht sich auch die CPU-Auslastung, da das ursprüngliche Design der MySQL-Datenbank auf effiziente Abfragen ausgerichtet ist und logische Operationen nicht förderlich ist
  • 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 in MySQL

Prozeduren erstellen und aufrufen

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

Wozu dienen gespeicherte MySQL-Prozeduren?

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:

Wozu dienen gespeicherte MySQL-Prozeduren?

Rufen Sie die gespeicherte Prozedur auf. Der Code lautet wie folgt:

call mypro(1,2,@s);-- 调用存储过程 
select @s;-- 显示过程输出结果

Laufergebnisse

Wozu dienen gespeicherte MySQL-Prozeduren?

Syntaxanalyse für gespeicherte Prozeduren

  • create procedure wird zum Erstellen einer Prozedur verwendet; create procedure 用来创建过程;
  • mypro 用来定义过程名称;
  • (in a int,in b int,out sum int)表示过程的参数,其中 in 表示输入参数,out 表示输出参数。类似于 Java 定义方法时的形参和返回值;
  • beginend 表示过程主体的开始和结束,相当于 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();

运行结果

Wozu dienen gespeicherte MySQL-Prozeduren?

流程控制语句

if 条件语句

IF 语句包含多个条件判断,根据结果为 TRUEFALSE执行语句,与编程语言中的 ifelse ifelse 语法类似。

定义存储过程,输入一个整数,使用 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🎜🎜Wozu dienen gespeicherte MySQL-Prozeduren?🎜🎜
🎜🎜Flusskontrollanweisung🎜🎜

🎜if-Bedingungsanweisung 🎜 h4>🎜 Die 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🎜🎜Wozu dienen gespeicherte MySQL-Prozeduren?🎜

🎜🎜case-bedingte Anweisung🎜 h4>🎜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🎜

Wozu dienen gespeicherte MySQL-Prozeduren?

两种 case 语法都可以实现条件判断,但第一种适合范围值判断,而第二种适合确定值判断。

while 循环语句

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;

运行结果

Wozu dienen gespeicherte MySQL-Prozeduren?

loop 循环语句

循环语句,用来重复执行某些语句。

执行过程中可使用 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;

运行结果

Wozu dienen gespeicherte MySQL-Prozeduren?

代码中的 loop_sum 相当于给循环贴个标签,方便多重循环时灵活操作。

存储过程的管理

存储过程的管理主要包括:显示过程、显示过程源码、删除过程。

比较简单的方式就是利用 navicat 客户端工具进行管理,鼠标点击操作即可,如下图所示:

Wozu dienen gespeicherte MySQL-Prozeduren?

显示存储过程

SHOW PROCEDURE STATUS;

显示特定数据库的存储过程

SHOW PROCEDURE status where db = 'schooldb';

显示特定模式的存储过程,要求显示名称中包含“my”的存储过程

SHOW PROCEDURE status where name like '%my%';

显示存储过程“mypro1”的源码

SHOW CREATE PROCEDURE mypro1;

Wozu dienen gespeicherte MySQL-Prozeduren?

删除存储过程“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!

Stellungnahme:
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