博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL之自定义函数实例讲解
阅读量:5941 次
发布时间:2019-06-19

本文共 1732 字,大约阅读时间需要 5 分钟。

转自:https://www.2cto.com/database/201804/740205.html

MySQL中已经有很多函数,如时间函数等,但是有时这些函数不能满足自己的设计需求,此时需要自定义函数,用户自定义函数(User-defined functuin,UDF)是对MySQL的扩展,其用法和内置函数相同

函数需要具备:参数 返回值

对于函数体中的部分可以是:

1、函数体由合法的SQL语句组成

2、函数体可以是简单的select或者insert语句

3、函数体若为复合结构则使用begin...end语句

4、复合结构可以包含声明、循环、控制结构

1、无参数

知道通过now()函数可以显示日期和时间,如果想把这个时间表达成:“年月日时分秒” 的形式怎么办呢?通过使用格式化函数DATE_FORMAT()

1
mysql>
select
DATE_FORMAT(NOW(),
'%Y年%m月%d日 %H点:%i分:%s秒'
);

\

由于该过程书写较为麻烦,如果经常使用很不方便,因此将其“制作”成函数

1
2
mysql>
create
FUNCTION
f1()
returns
varchar
(30)
    
->
RETURN
DATE_FORMAT(NOW(),
'%Y年:%m月:%d日 %H点:%i分:%s秒'
);

\

由于在定义f1()的时候没有参数,因此调用时就可以直接调用

1
mysql>
select
f1();

2、带有参数

带有一个以上的参数时,这里求解两个数的平均数

1
2
3
mysql>
create
FUNCTION
f2(num1
smallint
unsigned,num2
smallint
unsigned)  #函数名
    
->
RETURNS
FLOAT
(10,2) UNSIGNED       #返回值的类型
    
->
RETURN
(num1+num2)/2;              #返回值

\

3、创建具有复合结构的函数

首先创建一个数据表test

1
2
3
root@localhost test>
create
table
test(id tinyint(3) unsigned
primary
key
auto_increment,
    
-> username
varchar
(30)
not
null
    
-> );

\

现在想往数据表中插入记录,返回值是新插入的记录的id号

1
root@localhost test>
insert
into
test
values
(
default
,
'Lj.K'
);

由于分号是命令的结束,因此这里需要修改默认的分隔符,否则在输入分号之后无法返回新插入记录的id,因此使用命令

1
DELIMITER 分隔符

这样所有的命令均需要以分隔符来结束

\

比这将分隔符修改为//,则所有命令均需要以 // 为结束

1
2
3
4
5
6
7
root@localhost test>
create
FUNCTION
adduser(username
varchar
(20))  #创建添加参数名为username的函数adduser
    
->
RETURNS
INT
UNSIGNED
    
->
BEGIN
    
->
INSERT
test(username)
VALUES
(username);
    
->
RETURN
LAST_INSERT_ID();
    
->
END
    
-> //

这里因为有两条语句 insert test(username) values(username)和return last_insert_id()两条语句要执行,因此需要使用BEGIN...END语句,从而构成聚合体

1
2
root@localhost test>
select 
adduser(
'Rose'
);
    
-> //

\

1
2
root@localhost test>DELIMITER ;
root@localhost test>
select 
adduser(
'Tom'
);

\

通过drop function命令进行删除

转载于:https://www.cnblogs.com/sharpest/p/9936857.html

你可能感兴趣的文章
关于吃掉物理的二次聚合无法实现的需要之旁门左道实现法
查看>>
mysql出现unblock with 'mysqladmin flush-hosts'
查看>>
oracle exp/imp命令详解
查看>>
开发安全的 API 所需要核对的清单
查看>>
Mycat源码中的单例模式
查看>>
WPF Dispatcher介绍
查看>>
fiddler展示serverIP方法
查看>>
C语言中的随意跳转
查看>>
006-spring cloud gateway-GatewayAutoConfiguration核心配置-GatewayProperties初始化加载、Route初始化加载...
查看>>
WPF中如何将ListViewItem双击事件绑定到Command
查看>>
《聚散两依依》
查看>>
小tips:你不知道的 npm init
查看>>
Mac笔记本中是用Idea开发工具在Java项目中调用python脚本遇到的环境变量问题解决...
查看>>
Jmeter也能IP欺骗!
查看>>
Rust 阴阳谜题,及纯基于代码的分析与化简
查看>>
ASP.NET Core的身份认证框架IdentityServer4(4)- 支持的规范
查看>>
(原創) array可以使用reference方式傳進function嗎? (C/C++)
查看>>
STM32F103--(二) GPIO实践
查看>>
关于开源无线路由器的资料
查看>>
Oracle 分页
查看>>