mysql 函数和存储过程区别
-
一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局数据库状态的操作。
-
对于存储过程来说可以返回参数,如记录集,而函数只能返回值或者表对象。函数只能返回一个变量;而存储过程可以返回多个。存储过程的参数可以有IN,OUT,INOUT三种类型,而函数只能有IN类~~存储过程声明时不需要返回类型,而函数声明时需要描述返回类型,且函数体中必须包含一个有效的RETURN语句。
-
存储过程,可以使用非确定函数,不允许在用户定义函数主体中内置非确定函数。
-
存储过程一般是作为一个独立的部分来执行( EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。
函数格式
-- 定义方法名 传入参数值
create function functionName([parm1 type],[parm2 type],...)
{
-- 声明返回变量类型
returns type;
-- 开始
begin
/*执行业务处理逻辑*/
-- 结束
end
}
调用格式
select functionName(1);
mysql 变量赋值的三种方法
mysql中变量不用事前申明,在用的时候直接用“@变量名”使用就可以了
-- 第一种用法
set @num=1; 或 set @num:=1; -- 这里要使用变量来保存数据,直接使用@num变量
-- 第二种用法:
select @num:=1; 或 select @num:=字段名 from 表名 where ……
-- 注意上面两种赋值符号,使用set时可以用“=”或“:=”,但是使用select时必须用“:=赋值”
-- 第三种用法:
select 字段名1,字段名2 into @变量1,@变量2 from 表名 where ......
在函数或存储过程或触发器中,在不能使用set
的时候推荐第三种
,因为第二种会在执行时返回查询结果
,这在函数或触发器中会报 “Not allowed to return a result set from a function
”错误。而第三种则不会报错。