mysql 自定义函数,是对 mysql 扩展的途径,用法和内置函数相同
在工作中,使用 mysql 自带的函数不能满足需要,进而创建更贴近业务的自定义函数
1、创建自定义函数
自定义函数可以接收任意类型的参数,也可以返回任意类型的值
自定义函数基本语法格式如下
CREATE FUNCTION function_name
RETURNS type
routine_body
function_name 是自定义函数的名字
type 是自定义函数返回值类型
routine_body 是自定义函数的函数体,即自定义函数的具体内容
1.1、创建无参数的自定义函数
返回数据库版本
create FUNCTION getversion()
RETURNS varchar(25)
return ( SELECT CONCAT('mysql数据库版本', VERSION()))
执行结果如下
1.2、创建有参数的自定义函数
两数求和
CREATE FUNCTION numadd(num1 int , num2 int)
RETURNS INT
RETURN num1 + num2
运行结果如下
1.3、创建具有复合结构函数体的自定义函数
首先创建一张用户表,并添加三条数据,sql 如下
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`user_id` int(20) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`addr` varchar(20) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '蔺相如', '山西');
INSERT INTO `user` VALUES ('2', '陈子昂', '四川');
INSERT INTO `user` VALUES ('3', '李开先', '山东');
创建自定义函数如下
添加一条记录,返回最新的总记录数
create FUNCTION addcount(name1 VARCHAR(20), addr1 VARCHAR(20))
RETURNS INT
BEGIN
insert into user(name, addr) values(name1, addr1);
return (select count(1) from user);
end
注意:笔者这里使用的是 navicat 和 mysql5.7.25 版本,如果读者使用的是 mysql 命令行客户端,需要使用 DELIMITER $$ 定义结束符,因为上边语句中的 ";" 会被mysql 命令行客户端识别为结束符,因此在有";"的函数体中,需要读者额外定义结束符
DELIMITER $$
create FUNCTION addcount(name1 VARCHAR(20), addr1 VARCHAR(20))
RETURNS INT
BEGIN
insert into user(name, addr) values(name1, addr1);
return (select count(1) from user);
end $$
运行结果如下
2、删除自定义函数
语法格式如下
DROP FUNCTION [IF EXISTS] function_name
function_name 需要删除的自定义函数名
删除自定义函数
删除前边创建的自定义函数 addcount
DROP FUNCTION IF EXISTS addcount
或
DROP FUNCTION addcount
3、使用 navicat 操作自定义函数
3.1、创建自定义函数
打开 navicat 软件,点击上方的函数图标、点击新建函数
选择函数
设置参数
这里先建一个无参数的自定义函数,选择下一步
设置返回值类型,点击完成
定义函数体,保存
设置函数名,确定
这里是 GETVERSION
自定义函数创建完成
测试调用
个人感觉使用 navicat 创建自定义函数并没有简单多少,反而步骤繁琐,不如直接使用命令创建
3.2、删除自定义函数
选择要删除的函数,直接点击删除或鼠标右键删除
确定 删除
删除完成