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

怎么查询,怎样写sql

在sql 语句中判断不能用 == ,要用 = 就行了 ,赋值 用 :=

函数 和 储存过程的相同点 和不同点:

函数的创建:

函数只能在指定数据库中用。 和存储方法一样

delimiter

createfunction函数名称(参数列表)returns返回类型beginsql语句end

createfunction函数名称(参数列表)returns返回类型beginsql语句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

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 ;

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


分享到:


相關文章: