MySQL快查-自定义函数与存储过程

这篇博客详细介绍了MySQL中的自定义函数和存储过程,包括如何创建、查看、删除和修改它们。还讨论了函数与存储过程的区别,并解决了创建过程中遇到的ERROR 1418问题。
摘要由CSDN通过智能技术生成

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;  # 查出的内容太多,不方便
+-------+----------------------------------+----------+---------------------+---------------------+---------------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值