Heim > Datenbank > MySQL-Tutorial > Detaillierte Einführung in benutzerdefinierte MySQL-Funktionen und gespeicherte Prozeduren (mit Code)

Detaillierte Einführung in benutzerdefinierte MySQL-Funktionen und gespeicherte Prozeduren (mit Code)

不言
Freigeben: 2019-04-15 11:48:39
nach vorne
2152 Leute haben es durchsucht

Dieser Artikel bietet Ihnen eine detaillierte Einführung in benutzerdefinierte MySQL-Funktionen und gespeicherte Prozeduren (mit Code). Ich hoffe, dass er für Freunde hilfreich ist.

1. Voraussetzungen

Die Struktur und die Daten sind wie folgt:

mysql> desc  user_info;
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| id        | int(10)  | NO   | PRI | NULL    |       |
| name      | char(20) | NO   |     | NULL    |       |
| passwd    | char(40) | NO   |     | NULL    |       |
| email     | char(20) | NO   |     | NULL    |       |
| phone     | char(20) | NO   |     | NULL    |       |
| role      | char(10) | NO   |     | NULL    |       |
| sex       | char(10) | NO   |     | NULL    |       |
| status    | int(10)  | NO   |     | NULL    |       |
| createAt  | datetime | NO   |     | NULL    |       |
| exprAt    | datetime | NO   |     | NULL    |       |
| validDays | int(10)  | NO   |     | NULL    |       |
| delAt     | datetime | YES  |     | NULL    |       |
+-----------+----------+------+-----+---------+-------+
12 rows in set (0.10 sec)

mysql> select  * from  user_info;
+----+--------------+----------+------------+-------------+--------+------+--------+---------------------+---------------------+-----------+-------+
| id | name         | passwd   | email      | phone       | role   | sex  | status | createAt            | exprAt              | validDays | delAt |
+----+--------------+----------+------------+-------------+--------+------+--------+---------------------+---------------------+-----------+-------+
|  1 | StephenWang7 | py123456 | 123@qq.com | 15103887470 | admin  | male |    200 | 2019-04-12 20:11:30 | 2019-04-19 20:11:30 |        30 | NULL  |
|  2 | StephenWang8 | 123456   | 123@qq.com | 15103887470 | viewer | male |    200 | 2019-04-12 20:11:30 | 2019-04-19 20:11:30 |        30 | NULL  |
+----+--------------+----------+------------+-------------+--------+------+--------+---------------------+---------------------+-----------+-------+
2 rows in set (0.00 sec)
Nach dem Login kopieren

2 🎜 >

Funktion: Eine Sammlung von SQL, die eine bestimmte Funktion ausführen kann. MySQL unterstützt benutzerdefinierte Funktionen zur Vervollständigung spezifischer Geschäftsfunktionen.

Die Syntax zum Erstellen einer benutzerdefinierten Funktion (User Defined Function (kurz UDF)) lautet wie folgt:

create function <函数名称> ([参数1] [类型1], [参数N] [类型N])
returns <类型>
return 
<函数主体>
Nach dem Login kopieren

Die Syntax zum Aufrufen von UDF lautet wie folgt:


select  <函数名称> ([参数])
Nach dem Login kopieren

Erstellen einer UDF ohne Parameter

Beispiel 1: Abfrage, wie viele Datensätze in der Tabelle „user_info“ vorhanden sind

#定义函数
mysql> create function  user_info_count()
    -> returns int(10)
    -> return
    -> (select  count(*) from user_info);
Nach dem Login kopieren

Funktion user_info_count() aufrufen

mysql> select  user_info_count();
+-------------------+
| user_info_count() |
+-------------------+
|                 2 |
+-------------------+
1 row in set (0.00 sec)
Nach dem Login kopieren

Ein parametrisiertes UDF erstellen

Beispiel 2: Benutzernamen basierend auf der ID abfragen.

#定义函数
mysql> create function  queryNameById(uid int(10))
    -> returns char(20)
    -> return
    -> (select  name  from   user_info  where id=uid);
Query OK, 0 rows affected (0.01 sec)
Nach dem Login kopieren

Rufen Sie die Funktion auf, um den Benutzernamen mit der ID 1 abzufragen.

mysql> select  queryNameById(1);
+------------------+
| queryNameById(1) |
+------------------+
| StephenWang7     |
+------------------+
1 row in set (0.00 sec)
Nach dem Login kopieren

UDF anzeigen

Alle UDFs im System abfragen

show function status;
Nach dem Login kopieren

Die angegebene UDF abfragen

#
show   create function   函数名称;
mysql> show  function   queryNameById;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near &#39;queryNameById&#39; at line 1
mysql> show  function   queryNameById();
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near &#39;queryNameById()&#39; at line 1
mysql> show   create function   queryNameById();
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near &#39;()&#39; at line 1
mysql> show   create function   queryNameById;
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| Function      | sql_mode                                                                                                                                  | Create Function                                                                                                                                               | character_set_client | collation_connection | Database Collation |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| queryNameById | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` FUNCTION `queryNameById`(uid int(10)) RETURNS char(20) CHARSET latin1
return (select  name  from   user_info  where id=uid) | utf8                 | utf8_general_ci      | latin1_swedish_ci  |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec
Nach dem Login kopieren

UDF ändern

Wenn Sie möchten Ändern Sie den Inhalt der Funktion, löschen Sie sie und erstellen Sie sie dann neu.

UDF löschen

Die Syntax zum Löschen von UDF lautet wie folgt:

drop function  <函数名称>;
Nach dem Login kopieren

Beispiel 3: Nachdem Sie die Funktion queryNameId gelöscht haben, rufen Sie sie erneut auf und beobachten Sie das Phänomen.

mysql> drop  function queryNameById;
Query OK, 0 rows affected (0.45 sec)

mysql> select queryNameById(1);
ERROR 1305 (42000): FUNCTION rms.queryNameById does not exist
mysql>
Nach dem Login kopieren

3. Gespeicherte Prozedur

Die Speicherfunktion ähnelt der benutzerdefinierten Funktion und besteht ebenfalls aus einer Reihe von SQL-Anweisungen, die bestimmte Funktionen ausführen. Schreiben Sie vorab komplexes oder häufig aufgerufenes SQL und geben Sie einen Namen an. Wenn Sie es verwenden möchten, rufen Sie es einfach direkt auf.

Die Syntax zum Definieren einer gespeicherten Prozedur lautet wie folgt:

CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体>
[过程参数[,…] ] 格式
[ IN | OUT | INOUT ] <参数名> <类型>
#语法定义来自:http://c.biancheng.net/view/2593.html
Nach dem Login kopieren

Erstellen Sie eine gespeicherte Prozedur ohne Parameter

Beispiel 4: Benutzernamen abfragen.

mysql> DELIMITER //
mysql> craete procedure queryName()
    -> begin
    -> select  name from user_info;
    -> end //
Nach dem Login kopieren

Ändern Sie beim DELIMITER-Befehl das Zeichen des MySQL-Endbefehls. Das standardmäßige Endbefehlszeichen ist ein Semikolon. Wenn die gespeicherte Prozedur mehrere Anweisungen enthält, wird das erste angetroffene Semikolon als Zeichen für das Ende der gespeicherten Prozedur verwendet. Dies ist nicht wie erwartet, daher muss das Standardzeichen für den Endbefehl geändert werden. DELIMITER //Ändern Sie einfach das Ende-Befehlszeichen in //. Der Befehl zum Aufrufen einer gespeicherten Prozedur lautet: Name der gespeicherten Prozedur aufrufen.

#此时的命令的结束符号为// 不是;
mysql> call  queryName()//
+--------------+
| name         |
+--------------+
| StephenWang7 |
| StephenWang8 |
+--------------+
2 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
Nach dem Login kopieren

Erstellen Sie eine gespeicherte Prozedur mit Parametern

Beispiel 5: Namen basierend auf der ID abfragen.

mysql> create procedure  queryNameById
    -> (In uid int(15))
    -> begin
    -> select  name  from  user_info where id=uid;
    -> end
    -> //
Query OK, 0 rows affected (0.03 sec)
Nach dem Login kopieren

Rufen Sie die gespeicherte Prozedur queryNameById auf

mysql> call queryNameById(1);
    -> //
+--------------+
| name         |
+--------------+
| StephenWang7 |
+--------------+
1 row in set (0.03 sec)

Query OK, 0 rows affected (0.04 sec)
Nach dem Login kopieren

Ändern Sie die gespeicherte Prozedur

Wenn Sie den Inhalt der gespeicherten Prozedur erstellen möchten, können Sie diese löschen und dann neu erstellen gespeicherte Prozedur.

Gespeicherte Prozedur anzeigen

show create procedure <过程名称>
Nach dem Login kopieren
mysql> show create procedure queryNameById; -> // +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ | Procedure | sql_mode | Create Procedure | character_set_client | collation_connection | Database Collation | +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ | queryNameById | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` PROCEDURE `queryNameById`(In uid int(15)) begin select name from user_info where id=uid; end | utf8 | utf8_general_ci | latin1_swedish_ci | +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+ 1 row in set (0.04 sec)
Nach dem Login kopieren

Gespeicherte Prozedur löschen

drop procedure <过程名称>
Nach dem Login kopieren

Gespeicherte Prozedur queryNameById löschen

mysql> drop procedure  queryNameById//
Query OK, 0 rows affected (0.02 sec)


mysql> call  queryNameById(1)//
ERROR 1305 (42000): PROCEDURE rms.queryNameById does not exist
Nach dem Login kopieren

4. Zusammenfassung

Benutzerdefinierte Funktionen und gespeicherte Prozeduren sind alle SQL-Sammlungen, die bestimmte Funktionen ausführen. Was sind also ihre Unterschiede?

a. Verschiedene Aufrufmethoden

#自定义函数
select  <函数名>
#存储过程
call <存储过程名>
Nach dem Login kopieren
b. Benutzerdefinierte Funktionen können keine Ausgabeparameter haben, gespeicherte Prozeduren jedoch.

c. Benutzerdefinierte Funktionen müssen Rückgabeanweisungen enthalten, gespeicherte Prozeduren jedoch nicht.

[Verwandte Empfehlungen:

MySQL-Tutorial]

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in benutzerdefinierte MySQL-Funktionen und gespeicherte Prozeduren (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
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