一、是什么
用户自己定义函数
由于设计函数的每一条指令都是一个独立的个体,因此需要语句结束符,因为函数是一个整体,且不能被中断。MySQL 一旦见到语句结束符就会自动开始执行
解决方案
在定义函数之前,修改临时的语句结束符 ;
在 MySQL 中使用 delimiter
来修改临时语句结束符。默认情况下,delimiter是分号 ;
在命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令。
语法:
delimiter 新符号 //使用系统非内置的符号,如 $$
正常 SQL指令 //此时语句后有 ; 也不会执行
使用新符号结束
delimiter ; //将语句结束符改为 ;
二、创建函数
自定义函数包含这几个要素
- function 关键字
- 函数名
- 参数(可以为空)
- 函数体
- 返回值
语法:
delimiter 新符号
create function 函数名(形参) returns 返回值类型
begin
函数体
return 返回值数据 //数据必须与结构中定义的返回值类型一致
end
新符号 //用于结束语句
delimiter ; //将结束符重新改为 ;
1.创建无参函数
可以看到,如果不修改语句结束符,当遇到 ;
时就会结束语句
我们修改语句结束符,此时函数中的语句当见到符号 ;
时不会自动执行了。当然别忘了还要将结束符号重新变为 ;
PS
如果函数本身只有一条指令 return,此时我们可以省略 begin 和 return,甚至连 delimiter 都不需要用到
2.创建有参函数
如果函数包含形参
语法:注意形参的位置是变量名字在前面,这和我们使用其他语言不一样
delimiter 新符号
create function 函数名(变量名 变量类型) returns 返回值类型
begin
函数体
return 返回值数据 //数据必须与结构中定义的返回值类型一致
end
新符号 //用于结束语句
delimiter ; //将结束符重新改为 ;
创建形参是 int 类型的 a 和 b 的函数
三、查看函数
1.可以查看函数的状态,查看所有的函数
语法:show function status;
也可以使用通配符来查找指定名字的函数,这里我找的是刚才创建的函数
2.查看函数的创建语句
语法:show create function 函数名
同样查找刚才创建的函数
四、调用函数
自定义函数调用的方式和系统内置函数调用的方式一致
语法:select 函数名(实参列表)
五、删除函数
语法:drop function 函数名
六、注意事项
- 自定义函数是属于用户级别的,只有当前客户端对应的数据库中才可以使用。
- 可以在不同的数据库下看到对应的函数,但是不能调用
- 函数因为必须规范返回值,在函数内部不能使用 select 指令,因为该指令一旦执行会得到一个结果集,这是不允许的