视频封面 · 热门壁纸推荐 / Bilibili
460 字
2 分钟
MySQL07-存储函数
详细的描述了MySQL中的存储函数。
存储函数
存储函数是有返回值的存储过程,存储函数的参数只能是IN类型的。
语法
CREATE FUNCTION 存储函数名称([参数列表])RETURNS type [characteristic ...]BEGIN --SQL语句 RETURN ...;END;
characteristic说明: + DETERMINISTIC:相同的输入参数总是产生相同的结果 + NO SQL:不包含SQL语句。 + READS SQL DATA:包含读取数据的语句,但不包含写入数据的语句。样例
-- 存储函数-- 计算从1到n的累加create function fun1(n int)returns int deterministicbegin declare total int default 0;
while n > 0 do set total := total + n; set n := n - 1; end while;
return total;end;
select fun1(100);注意当未添加 deterministic 会产生如下bug:
此例中,函数仅按输入整数做累加,相同输入能确定相同结果,因此声明 DETERMINISTIC 有明确依据。若启用了二进制日志,且函数创建者信任设置保持严格,创建函数时未声明确定性、无数据访问或只读数据等特征,可能被拒绝。这里讨论的是创建阶段的日志安全限制,并非所有环境中省略确定性声明都会出错。
运行结果:
此例中,函数从传入的 100 开始,每轮先累加再递减,直到参数不再为正,最后通过 RETURN total 返回总和。由一至一百的等差求和可得 5050,因此 SELECT fun1(100) 读取的是这一标量值;这与存储过程中直接执行查询返回结果集的写法不同。
注意
存储函数必须要有返回值,而且参数只能是输入类型的参数,其过程实现完全可以被存储过程所代替。
因此存储函数的使用较少,这里仅做了解。