mysql,如何定义和使用数据库专用函数function?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
苏南大叔在本文中将要描述如何定义和使用mysql
数据库专用的函数。这些函数定义后,是和数据表同级别的存在。下次链接数据库之后,还是可以继续使用的。
大家好,这里是苏南大叔的“程序如此灵动”博客,主要记录苏南大叔的代码编程所学所想。本文描述mysql
数据库专用自定义函数的创建和使用方式。测试环境:win10
,mysql@5.7.26
。
背景文章
如果您使用mysql
官方客户端在命令行下执行相关语句的话,那么,您可能会用到分隔符delimiter
的用法。参考文章:
切换分隔符为$
:
delimiter $
恢复分隔符为分号的方法为:
delimiter ;
如果使用的是第三方客户端,这个切换分隔符的操作是大概率不用的。强制输入的话,也极大概率会被识别成错误。
官方客户端里面,只有输入这个分隔符,才会执行相关语句。而可视化的非官方客户端里面,因为是先输入整体语句,再通过操作按钮才会执行全部语句,所以并没有这个困扰!
数据集
这里还是采用前几篇文章里面的数据集:
DROP TABLE IF EXISTS `posts`;
CREATE TABLE `posts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`title` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT INTO `posts` VALUES (1,1,'1-苏南大叔的文章1'),(2,1,'1-苏南大叔的文章2'),(3,2,'2-苏南大哥的文章'),(4,9,'9-神秘人的文章');
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `users` VALUES (1,'1-苏南大叔'),(2,'2-苏南大哥'),(3,'3-苏南兄弟');
创建自定义函数和调用
语法如下:
create function 函数名(参数名1 参数类型1,参数名2 参数类型2,...) returns 返回类型
begin
函数体
End
注意:语法中是returns
,多个s
字样。
这个自定义函数,必须有返回值有返回语句,返回个空字符串也行。但是必须要返回个值,否则不符合语法。
报错信息如下:
no RETURN found
自定义函数,有且只有一个返回值。
调用方式
调用的方式是:
select 函数名(参数)
测试用例一(没参数)
下面的测试用例里面,在第三方客户端里执行,所以没有考虑分隔符切换的问题。
求当前共有几名用户:
create function count_users() returns int
begin
declare c int default 0;
select count(*) into c from users;
return c;
End
select count_users()
select count_users() as cnt
测试用例二(传递参数)
求用户名对应的用户id:
create function get_uid(userName VARCHAR(20)) returns int
begin
set @uid=0;
select id into @uid from users where name = userName;
return @uid;
End
select get_uid("1-苏南大叔") as a,get_uid("苏南大叔") as b;
查看定义
show create function 函数名
可以看到对get_uid
的函数体查询中,是多了一些字样(DEFINER=
root@
localhost`)的。
CREATE DEFINER=`root`@`localhost` FUNCTION `get_uid`(userName VARCHAR(20)) RETURNS int(11)
begin
set @uid=0;
select id into @uid from users where name = userName;
return @uid;
End;
删除定义
drop function 函数名
测试用例语句是:
drop function get_uid
相关文章
- https://newsn.net/say/mysql-delimiter.html
- https://newsn.net/say/mysql-left-join.html
- https://newsn.net/say/mysql-inner-join.html
- https://newsn.net/say/mysql-using.html
总结
更多苏南大叔写的mysql
相关文章,请点击下面的链接查看:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。