示例3:删除函数queryNameId后再次调用并观察现象。
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> 3、存储过程存储功能和自定义函数相似,也是一组完成特定功能的SQL语句集合。把复杂或频繁调用的SQL提前写好并指定一个名称。待到要使用时,直接调用即可。
定义存储过程的语法如下:
示例4:查询用户name。
mysql> DELIMITER // mysql> craete procedure queryName() -> begin -> select name from user_info; -> end //关于DELIMITER命令,修改MySQL结束命令的字符。默认的结束命令字符为分号,当存储过程中包含多条语句时,遇到第一个分号会作为存储过程结束的标志。这样不符合预期,因此需要修改默认结束命令字符。 DELIMITER //就是将结束命令字符修改为//。调用存储过程的命令为:call 存储过程名称。
#此时的命令的结束符号为// 不是; mysql> call queryName()// +--------------+ | name | +--------------+ | StephenWang7 | | StephenWang8 | +--------------+ 2 rows in set (0.00 sec) Query OK, 0 rows affected (0.00 sec) 创建带参数的存储过程示例5:根据id查询name。
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)调用存储过程queryNameById
mysql> call queryNameById(1); -> // +--------------+ | name | +--------------+ | StephenWang7 | +--------------+ 1 row in set (0.03 sec) Query OK, 0 rows affected (0.04 sec) 修改存储过程如果想创建存储过程的内容可以先删除再重新创建存储过程。
查看存储过程 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 <过程名称>删除存储过程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、总结自定义函数和存储过程都是完成特定功能的SQL集合,那么他们有什么不同呢?
a、调用方式不同
b、自定义函数不能有输出参数,而存储过程可以。
c、自定义函数必须要包含return语句,而存储过程则不需要。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx