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`函数根据使用的上下文返回字符串或数字