MYSQL--自定义函数

什么是函数

  • 函数存储着一系列sql语句,调用函数就是一次性执行这些语句。所以函数可以降低语句重复。【但注意的是函数注重返回值,不注重执行过程,所以一些语句无法执行。所以函数并不是单纯的sql语句集合。】
  • mysql函数有自己的自定义函数(已经定义好了的函数)

函数跟存储过程区别

  • 函数与存储过程的区别:函数只会返回一个值,不允许返回一个结果集。函数强调返回值,所以函数不允许返回多个值的情况,即使是查询语句

如何操作自定义函数

函数的创建

delimiter 自定义符号  -- 如果函数体只有一条语句, begin和end可以省略, 同时delimiter也可以省略

  create function 函数名(形参列表) returns 返回类型  -- 注意是retruns

  begin

    函数体    -- 函数内定义的变量如:set @x = 1; 变量x为全局变量,在函数外面也可以使用

    返回值

  end

  自定义符号

  delimiter ;

语法注意:

这里需要注意的是DELIMITER //和DELIMITER ;两句,DELIMITER是分割符的意思,因为MySQL默认以";“为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将”;"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。

过程体的开始与结束使用BEGIN与END进行标识。

示例演示

  • 简化版
create function 函数名([参数列表]) returns 数据类型
begin
 函数体(sql语句);
 return;
end;
  • 参数列表的格式是: 变量名 数据类型
  • 示例
  • 无参函数
-- 最简单的仅有一条sql的函数
create function myselect2() returns int return 666;
select myselect2(); -- 调用函数

其中begin和end是可以省略的

  • 比如,查询当前日期并将其按照年月日进行格式化
create function f1() returns nvarchar(30)
return date_format(now(),'%Y年%m月%d日');

!!!注意!!!

通常往mysql数据库插入中文的时候会报错

mysql> select f2();
ERROR 1366 (HY000): Incorrect string value: '\xC4\xEA09\xD4\xC2...' for column 'f2()' at row 1

这里建议将上述创建函数中返回值由varchar改为nvarchar即可

  • 有参函数(传入两值,然后求和除以2),将结果返回
create function f2(num1 int,num2 int)
returns float(10,2)
return (num1+num2)/2;
  • 创建具有复合结构函数体的自定义函数
  • 以student表为例,创建插入一条数据返回其id值得复合函数体得自定义函数
CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(11) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `sex` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
)
delimiter //
create function f4(a int(11),b varchar(11),c int(11),d int(11)) returns int(11)
begin
insert into student(id,name,age,sex) values(a,b,c,d);
return last_insert_id();
end
//
delimiter;

!!!关于函数体!!!

  • 函数体由合法的sql语句构成
  • 函数体可以是简单的SELECT或者INSERT语句构成
  • 函数体如果是复合结构则使用BEGIN…END语句
  • 复合结构可以包含声明、循环、控制结构

函数的调用

  • 直接使用函数名()就可以调用 【虽然这么说,但返回的是一个结果,sql中不使用select的话任何结果都无法显示出来(所以单纯调用会报错),】
  • 如果想要传入参数可以使用函数名(参数),如果没有参数,可以直接写函数名
  • 调用方式【下面调用的函数都是上面中创建的。】
-- 无参调用
select myselect3();
-- 传参调用(以上述有参函数为例)
select f2(10,15);
+-----------+
| f2(10,15) |
+-----------+
|     12.50 |
+-----------+

函数的查看

  • 查看函数创建语句:show create function 函数名;
  • 查看所有函数:show function status [like ‘pattern’];

函数的修改

  • 函数的修改只能修改一些如comment的选项,不能修改内部的sql语句和参数列表。
  • alter function 函数名 选项;

函数的删除

  • drop function 函数名;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值