MySQL快查
因为在日常工作学习中经常忘记mysql的一些语句、关键字、操作等内容,所以最近抽取时间写了以下关于mysql相关内容。相当于一本字典吧
重置mysql密码
数据类型
运算符
常用函数
数据完整性
数据库的基本操作
对表本身的操作
对表中数据的操作
子查询
多表连接
索引
视图
预处理SQL语句
本文
在MySQL中编程
自定义函数与存储过程
函数和存储过程的官方说明:
CREATE PROCEDURE and CREATE FUNCTION Statements
自定义函数
MySQL函数的概念类似于编程语言(如C语言)的概念。
创建自定义函数
create function func_name([[in | out | inout]func_parameter type[, ...]])
returns return_type
[characteristic...]
begin
# 函数体;
return [return_values];
end;
# func_name 函数名
# [in | out | inout] in表示输入参数,out表示输出参数,inout表示输入输出参数
# func_parameter 参数名
# type 参数类型
# return_type 函数返回值类型
# characteristic 指定函数的特征参数,可选值:
language sql
# 默认选项,用于说明函数体使用SQL语言编写
| [not] deterministic
# detrministic(确定性),当函数返回值不确定时,该选项是为了防止“复制”时的不一致。如果
# 函数总是对同样的输入参数产生同样的结果,则被认为是“确定的”,否则认为是“不确定的”。
# 不指定默认是“not deterministic”
| {
contains sql | no sql | reads sql data | modifies sql data}
# 指明子程序使用SQL语句的限制。
# contains sql 表示函数体中不包含读或写数据的语句,如set
# no sql 表示函数体中不包含SQL语句
# reads sql data 表示函数体中包含select查询语句,但不包含更新语句
# modifies sql data 表示函数体包含更新语句
# 不指明默认时contains sql
| sql security {
definer | invoker}
# 设置执行权限。用于指定函数的执行许可
# definer表示该函数只能由创建者调用
# invoker 表示该函数可以被其他数据库用户调用
# 默认是definer
| comment 'string'
# 注释,引号内就是要添加的注释内容
例:
# 创建一个做减法的函数
delimiter //
create function sub(arg1 int, arg2 int)
returns int
DETERMINISTIC
begin
return arg1 - arg2;
end //
delimiter ;
# 调用自定义函数与调用MySQL中的系统函数的方法一样
select sub(3, 1);
+-----------+
| sub(3, 1) |
+-----------+
| 2 |
+-----------+
1 row in set (0.00 sec)
delimiter
MySQL使用delimiter来更改命令结束标记。默认的结束标记是“;”。
为什么要更改结束标记?
因为在函数和存储过程中包含了很多的“;”,比如上面的例子——sub函数中的语句“return arg1 - arg2;”就有“;”,如果不更改结束符,我们在命令行中编写sub函数,写到这句语句时我们回车换行,由于“;”是默认的结束标记,这时候MySQL就试着执行,因为我们并没有写完函数,执行就会报错;所以在创建函数或者存储过程的时候要先将结束符换成其他字符,等创建好了再换回来。
查看函数的定义
show function status; # 查看全部函数
show function status like 模式; # 模糊查询
show create function 函数名; # 精确查看
show function status; # 查出的内容太多,不方便
+-------+----------------------------------+----------+---------------------+---------------------+---------------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------