欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql -- 自定义函数及循环结构

程序员文章站 2022-04-17 19:49:41
...

和存储过程类似,区别在于存储过程可以有0个或多个返回,但是函数只能有唯一一个返回值 一般而言,存储过程适合批量插入,批量删除,增删改;函数则用于处理数据,查询某个值。

创建

  1. create function 函数名( 参数名 参数类型 ) returns 返回类型;
  2. begin
  3. 函数体;
  4. end

函数体肯定会有return 语句,如果没有会报错。

调用

  1. select 函数名(参数列表);

示例

比方有员工表employees

id name
1 jack

要统计员工个数则可使用以下自定义函数:

  1. # 创建
  2. create function fun() returns int
  3. begin
  4. declare temp int defualt 0;
  5. select count(*) into temp
  6. from employees;
  7. return temp;
  8. end;
  9. # 调用
  10. select func();

查看

  1. show create function 函数名;

存储过程可在mysql数据库的proc表里查看,这个表里保存了这个数据库中保存的存储过程和函数,以type字段作为区分二者的标志。

删除

  1. drop function 函数名

和存储过程一样函数一般也很少做修改,若要修改则删掉之后再创建。


循环结构

mysql中,循环有while do , loop, repeat until, 循环体里的跳转语句有 iterate ,类似于continue,开始下一轮循环, leave,类似于break 结束循环体。

while do

语法:

  1. [标签:] while 条件 do # [] 表示可选
  2. 循环体...
  3. end while [标签];

示例: 批量插入,根据次数插入多次数条到某个表中, 如果次数大于20则停止:

  1. delimiter $
  2. create procedure pro_while( in insertCount int )
  3. begin
  4. declare i int default 1;
  5. a: while i <= insertCount do
  6. if i > 20 then leave a;
  7. end if;
  8. #插入语句;
  9. set i = i +1;
  10. end while a;
  11. end $;
  12. delimiter ;

loop

语法:

  1. [标签:] loop
  2. 循环体;
  3. end loop [标签];

loop 没有条件判定,若要结束循环体只能搭配leave 标签;使用,否则就是死循环。

repeat until

语法

  1. [标签:] repeat
  2. 循环体
  3. until 满足结束循环的条件
  4. end repeat [标签];

repeat 必然会执行一次循环体,而,其条件 是 满足该条件之后就结束循环体,与while 满足条件则执行循环体恰恰相反。