Maison > Article > base de données > Introduction détaillée aux fonctions personnalisées et aux procédures stockées MySQL (avec code)
Cet article vous apporte une introduction détaillée aux fonctions personnalisées et aux procédures stockées de MySQL (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
1. Conditions préalables
La table user_info existe dans la base de données MySQL. Sa structure et ses données sont les suivantes :
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)
Fonction : Une collection de SQL qui peut remplir une fonction spécifique. MySQL prend en charge des fonctions personnalisées pour compléter des fonctions métier spécifiques.
La syntaxe pour créer une fonction personnalisée (User Defined Function (UDF en abrégé)) est la suivante :
create function <函数名称> ([参数1] [类型1], [参数N] [类型N]) returns <类型> return <函数主体>
La syntaxe pour appeler UDF est la suivante :
select <函数名称> ([参数])
Créer une UDF sans paramètres
Exemple 1 : Rechercher combien d'enregistrements il y a dans la table user_info
#定义函数 mysql> create function user_info_count() -> returns int(10) -> return -> (select count(*) from user_info);
Appeler la fonction user_info_count()
mysql> select user_info_count(); +-------------------+ | user_info_count() | +-------------------+ | 2 | +-------------------+ 1 row in set (0.00 sec)
Exemple 2 : Requête du nom d'utilisateur en fonction de l'identifiant.
#定义函数 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)
Appelez la fonction pour interroger le nom d'utilisateur avec l'identifiant 1.
mysql> select queryNameById(1); +------------------+ | queryNameById(1) | +------------------+ | StephenWang7 | +------------------+ 1 row in set (0.00 sec)
Interroger toutes les UDF du système
show function status;
Interroger l'UDF spécifiée
# 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 'queryNameById' 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 'queryNameById()' 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 '()' 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
Si vous souhaitez modifier le contenu de la fonction, supprimez-la d'abord puis recréez-la.
La syntaxe de suppression de l'UDF est la suivante :
drop function <函数名称>;
Exemple 3 : Après avoir supprimé la fonction queryNameId, appelez-la à nouveau et observez le phénomène.
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>
La fonction de stockage est similaire à la fonction personnalisée, et c'est également un ensemble d'instructions SQL qui remplissent des fonctions spécifiques. Écrivez à l'avance du SQL complexe ou fréquemment appelé et spécifiez un nom. Lorsque vous souhaitez l'utiliser, appelez-le directement.
La syntaxe pour définir une procédure stockée est la suivante :
CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体> [过程参数[,…] ] 格式 [ IN | OUT | INOUT ] <参数名> <类型> #语法定义来自:http://c.biancheng.net/view/2593.html
Exemple 4 : Requête du nom d'utilisateur.
mysql> DELIMITER // mysql> craete procedure queryName() -> begin -> select name from user_info; -> end //
Concernant la commande DELIMITER, modifiez le caractère de la commande de fin MySQL. Le caractère de commande de fin par défaut est un point-virgule. Lorsque la procédure stockée contient plusieurs instructions, le premier point-virgule rencontré sera utilisé comme signe de fin de la procédure stockée. Ce n'est pas comme prévu, le caractère de commande de fin par défaut doit donc être modifié. DELIMITER //Changez simplement le caractère de fin de la commande en //. La commande pour appeler une procédure stockée est la suivante : appeler le nom de la procédure stockée.
#此时的命令的结束符号为// 不是; mysql> call queryName()// +--------------+ | name | +--------------+ | StephenWang7 | | StephenWang8 | +--------------+ 2 rows in set (0.00 sec) Query OK, 0 rows affected (0.00 sec)
Exemple 5 : Nom de requête basé sur l'identifiant.
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)
Appelez la procédure stockée queryNameById
mysql> call queryNameById(1); -> // +--------------+ | name | +--------------+ | StephenWang7 | +--------------+ 1 row in set (0.03 sec) Query OK, 0 rows affected (0.04 sec)
Si vous souhaitez créer le contenu de la procédure stockée, vous pouvez supprimer puis recréez la procédure stockée.
show create procedure <过程名称>
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)
drop procedure <过程名称>
Supprimer la procédure stockée queryNameById
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
4. 🎜>
#自定义函数 select <函数名> #存储过程 call <存储过程名>a. Différentes méthodes d'appel
c. Les fonctions personnalisées doivent contenir des instructions return, mais pas les procédures stockées. [Recommandations associées :
Tutoriel MySQL]Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!