mysql 中函数和存储过程的区别和联系

怎么查询,怎样写sql
在sql 语句中判断不能用 == ,要用  =  就行了 ,赋值 用 := 


函数  和 储存过程的相同点 和不同点:
函数的创建:
函数只能在指定数据库中用。 和存储方法一样
delimiter $$
create function 函数名称(参数列表) returns 返回类型
begin
sql语句
end
$$
delimiter ;




调用:
select 函数名(参数列表)


 删除函数:
drop function 函数名称;


储存过程的创建:


delimiter //
create procedure 存储过程名称(参数列表)
begin
sql语句
end
//
delimiter ;


调用时:
call 储存过程名();  --没有参数的话括号可以省去
删除储存过程:
drop procedure 存储过程名称;
相同点
     提高了语法的执行效率


* 存储过程和函数都是为了可重复的执行操作数据库的 sql 语句的集合.
* 存储过程和函数都是一次编译,就会被缓存起来,下次使用就直接命中缓存中已经编译好的 sql, 不需要重复编译
* 减少网络交互,减少网络访问流量


不同点
* 标识符不同,函数的标识符是 function, 过程:procedure
* 函数中有返回值,且必须有返回值,而过程没有返回值,但是可以通过设置参数类型(in,out)来实现多个参数或者返回值
* 函数使用 select 调用,存储过程需要使用 call 调用
* select 语句可以在存储过中调用,但是除了 select ... into 之外的 select 语句都不能再函数中调用
* 通过 in out 参数,过程相关函数更加灵活,可以返回多个结果
* 在实际开发中根据个人喜好选择使用函数或者存储过程




查看
* 所有存储过程和函数,都存储在mysql数据库下的proc表中
* 查看表结构


desc mysql.proc\G;




* 主要字段说明:

* name表示名称
* type表示类型,为存储过程、函数
* body表示正文脚本
* db表示属于的数据库


* 查看python数据库的所有存储过程


select name,type,body from mysql.proc where db='python';




函数实例:
-- 输出 0 ~ 100 间的偶数
-- 递增某一个值
-- 判断该值是否为偶数
-- 将偶数 拼接成一个字符串 最后返回


delimiter //
create function f3() returns varchar(300)
begin
-- 1. 声明递增的值 i, 拼接结果的 res
declare i int default 0;
declare res varchar(300) default '';
-- 2. 通过 while 递增 i
while i <= 100 do
-- 3. 判断 i 是否是偶数
if i % 2 = 0 then
-- 4. 拼接偶数
set res = concat(res,' ',i);
end if;
-- 递增 i
set i = i + 1;
end while;
-- 5. 返回 res
return res;
end
//


delimiter ;

储存过程实例:
-- 传入一个英雄的 id 删除该英雄,并且返回剩下的英雄总人数
delimiter //
create procedure deleteherobyid_getcount(in hid int unsigned,out rescount int)
begin
delete from mm_users where id = hid;
select count(*) from mm_users into rescount;
end
//


delimiter ;

猜你喜欢

转载自blog.csdn.net/wys578/article/details/80634455