MySQL创建 函数与存储过程

最近有用到MySQL函数创建问题以及存储过过程,踩坑记录一下

1、首先是函数创建总是报错


网上查了查,需要开启MySQL全局函数创建功能

-- 查看是否开启创建函数功能
show variables like '%func%';
-- 关闭创建函数的功能
set global log_bin_trust_function_creators = 0;
set global log_bin_trust_function_creators = false;
-- 开启创建函数功能
set global log_bin_trust_function_creators = 1;
set global log_bin_trust_function_creators = true;

2、函数创建、调用、删除


1、函数创建必须声明返回值类型

2、函数体内部返回值类型必须和函数声明的返回值类型一致

 案例一

-- 创建一个简单函数,并声明返回值类型 DATETIME
CREATE FUNCTION myTime() RETURNS DATETIME
BEGIN
    -- 函数体
    RETURN NOW();
END
-- 调用函数
SELECT myTime()

 案例二

-- 创建函数 并声明返回值类型为 VARCHAR(20)
CREATE FUNCTION MyTimePlus() RETURNS VARCHAR(20)
BEGIN
    -- 声明变量mytime 为varchar(20)
	DECLARE mytime VARCHAR(20) DEFAULT "默认时间";
    -- 为mytime完成赋值
	SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%S') INTO mytime;
    -- 返回结果
	RETURN mytime;
END 
-- 执行函数
SELECT MyTimePlus()

函数删除

DROP FUNCTION myTime

3、存储过程创建、调用、删除

-- 声明存储过程
CREATE PROCEDURE createPerson()
BEGIN 
	-- 存储过程方法体逻辑,创建表、添加数据
	CREATE TABLE person(
		uname VARCHAR(10),
		pass VARCHAR(10)
	);
	INSERT INTO person (uname, pass) VALUES ("jack", "123"),("ivan", "456");
END;

-- 执行存储过程
CALL createPerson()

-- 删除存储过程
DROP PROCEDURE createPerson

-- 声明存储过程,并声明方法参数类型
CREATE PROCEDURE queryPersons(name VARCHAR(20))
BEGIN
	-- 存储过程方法体逻辑
	SELECT * FROM person WHERE uname = name;
END

-- 执行存储过程
CALL queryPersons("jack")

4、区别

存储过程本质上没有太大区别,本质都是一些sql集合组成的一个方法体,并且可以被调用

声明上关键字不一样:function与procedure

执行不一样:函数直接用select可以调用,存储过程则是call关键字调用

使用范围不一样:函数可以直接用在sql语句中的Select调用,存储过程则不行

参考资料

MySQL 的存储过程 procedure 与 函数 function 的区别和使用方法_mysql 存储过程和方法的区别_xlxxcc的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值