1. 写在前面
本篇内容及部分示例代码基于《MySQL必知必会》,所需要获得和运行的一切东西,可以在 http://www.forta.com/books/0672327120/ 上找到,包括两个SQL脚本,create.sql 和 populate.sql。本篇内容的理解同时也参考了MySQL8.0的官方文档《MySQL 8.0 Reference Manual》,若有理解不到位的地方,有能力的小伙伴可以参考 https://dev.mysql.com/doc/refman/8.0/en/ 。
2. 存储过程
在刚开始接触MySQL的时候,一直搞不清楚存储过程和函数的区别。尤其,在数据库管理工具Navicat的操作界面中,两者又同样是在函数这个大类下。经过参考官方文档后,发现两者确实很相似,并且是在同一章节进行存储过程和函数的介绍。
2.1 创建存储过程 / 函数
1 CREATE2 [DEFINER = user]3 PROCEDURE sp_name ([proc_parameter[,...]])4 [characteristic ...] routine_body5
6 CREATE7 [DEFINER = user]8 FUNCTION sp_name ([func_parameter[,...]])9 RETURNS type10 [characteristic ...] routine_body11
12 proc_parameter:
13 [ IN | OUT | INOUT ] param_name type14
15 func_parameter:
16 param_name type17
18 type:
19 Any valid MySQL data type20
21 characteristic:{22 COMMENT 'string'
23 | LANGUAGE SQL24 | [NOT] DETERMINISTIC25 | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }26 | SQL SECURITY { DEFINER | INVOKER }27 }28
29 routine_body:
30 Valid SQL routine statement
这一段创建代码中有以下几点值得注意的:
1. 创建存储过程名/函数名的参数是不一样的: