MySQL的存储过程(call)

时间:2024-10-21 07:28:28

MySQL的存储过程(call):

一,解释:

MySQL 存储过程是从 MySQL 5.0 开始增加的新功能。存储过程的优点有一箩筐。

不过最主要的还是执行效率和SQL 代码封装

特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句。特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗。

现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高。

 

二,使用

第一部分:创建一个简单的无参的存储过程**

1 用mysql客户端登入

2 选择数据库

mysql>use test;

3 查询当前数据库有哪些存储过程

mysql>   show procedure status where Db='数据库表名';
# 创建一个简单的存储过程
mysql>   create procedure hi() select 'hello';
# 存储过程创建完毕,看怎么调用它
mysql>   call hi();
# 显示结果
mysql> call hi(); +-------+ | hello | +-------+ | hello | +-------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.01 sec)
# 一个简单的储存过程就成功了,这只是一个演示,存储过程可以一次执行多个sql语句

MySQL 创建存储过程函数 ,函数的基本写法

create procedure 存储过程名字()
(
   [in|out|inout] 参数 datatype
)
​
BEGIN   
    //  MySQL 逻辑语句(参数自定义)
END
MySQL 存储过程参数如果不显式指定“in”、“out”、“inout”,则默认为“in”。习惯上,对于是“in” 的参数,我们都不会显式指定。
语法注意事项:
​
1,MySQL 存储过程中的每条语句的末尾,都要加上分号 “;” 
   ...
   declare c int;
   if a is null then
      set a = 0;
   end if;
   ...
end;
​
2,注释是  --   ;  MySQL 存储过程的参数不能指定默认值
​
3,不能在 MySQL 存储过程中使用 “return” 关键字。 
   set c = a + b;
   select c as sum;
   
end;
​
4. 调用 MySQL 存储过程时候,需要在过程名字后面加“()”,即使没有一个参数,也需要“()”
call pr_no_param();
​
5. 因为 MySQL 存储过程参数没有默认值,所以在调用 MySQL 存储过程时候,不能省略参数。可以用 null 来替代。 
call pr_add(10, null);

参考:/you-zi/p/

-- --------------------------------------------------------------------------------------------------------------------------------------------------------

补充

MySQL `IFNULL` 函数是MySQL控制流函数之一,它接受两个参数,如果不是`NULL`,则返回第一个参数。 否则,`IFNULL`函数返回第二个参数。
​
两个参数可以是文字值或表达式
​
IFNULL(expression_1,expression_2);    // 如果`expression_1`不为`NULL`,则`IFNULL`函数返回`expression_1`; 否则返回`expression_2`的结果。
​
`IFNULL`函数根据使用的上下文返回字符串或数字