【MySQL 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】

  • 【1】mysql自定义函数的介绍
  • 【2】mysql创建和使用自定义函数
  • 【3】mysql删除自定义函数
  • 【4】mysql流控的使用
  • 【4.1】mysql流程控制语句
  • 【4.2】mysql IF语句
  • 【4.3】mysql CASE语句
  • 【4.4】mysql WHILE循环语句
  • 【4.5】mysql LOOP循环语句
  • 【4.6】mysql REPEAT循环语句


MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQL 定义数组 for循环

==1024 程序员 真的很累了 ==


【1】mysql自定义函数的介绍

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQLWorkbench_02

select book_name ,length(book_name) from book_bak;

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQLWorkbench_03


MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQL 定义数组 for循环_04

create function funtion_name(func_parameter)
returns type 
[characteritics ...]routine_body

【1】SQL_security:安全 {definer(规定)|invoker(祈求者)}
【2】comment :解释
【3】characteritics :特征

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_数据库_05

begin    

end

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_数据库_06


举例开始

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_数据库_07

-- 先看一个日期格式化的函数
select date_format(return_date,'%Y-%m') from borrowinfo;

-- 创建自定义函数 希望通过指点列名就可以查询到日期信息 YYYY-mm
create function fun(column_name date)
returns varchar(15) -- 指定返回的类型
return date_format(column_name,'%Y-%m'); -- 指定返回的结果

-- 使用自定义的函数查询
select fun(return_date)from borrowinfo;

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_mysql_08

自定义函数的完整举例

-- 先看一个日期格式化的函数
select date_format(return_date,'%Y-%m') from borrowinfo;

-- 创建自定义函数 希望通过指点列名就可以查询到日期信息 YYYY-mm
delimiter //   -- 开始 如果没有,指定返回结果哪里的 ; 会报错 解决这个问题的关键字
create function fun(column_name date)
returns varchar(15) -- 指定返回的类型
begin
return date_format(column_name,'%Y-%m'); -- 指定返回的结果
end // -- 没有
delimiter ; -- 结束

-- 使用自定义的函数查询
select fun(return_date)from borrowinfo;

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_图形化管理工具SQLyog_09


【2】mysql创建和使用自定义函数

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_数据库_10

-- 创建无参数的自定义函数 对日期函数进行封装和简化
create function  a()
returns varchar(11)
return date_format(curdate(),'%Y年%m月%d日');

select a();

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_数据库_11


MySQL 定义数组 for循环 mysql自定义函数遍历结果集_数据库_12

-- 创建带有参数的自定义函数 传入一个参数 
create function b(column_name int )
returns varchar(50) -- 返回值的数据类型
return (select concat_ws('-',book_id,book_name,store) from bookinfo where book_id = column_name);

-- 以图书信息表为例 传入一个图书信息表已有的图书编号

select b(1);

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQLWorkbench_13


【3】mysql删除自定义函数

drop function [if exists ] fun_name;

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_图形化管理工具SQLyog_14

-- 删除自定义函数 
DROP FUNCTION if EXISTS a;

-- 删除不存在的函数会报错 FUNCTION rb_sql.a does not exist

DROP FUNCTION  a;

-- 删除自定义函数 函数不存在时会警告  (0 row(s) affected, 1 warning(s))
DROP FUNCTION if EXISTS a;

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_mysql_15


【4】mysql流控的使用

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_数据库_16

begin ... and

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQLWorkbench_17

declare : 声明
//定义整形 num 默认值=10
declare num int default 10;

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQL 定义数组 for循环_18


into :(表示方向)进入…中; (表示所属)输入; (表示状态)进入…状态; (表示时间)持续到;
set num =10;
//将图书信息表的value 赋值给num
select value into num from bookinfo;

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_数据库_19


MySQL 定义数组 for循环 mysql自定义函数遍历结果集_图形化管理工具SQLyog_20

drop FUNCTION show_name_store;

create FUNCTION show_name_store(val int)
returns varchar(30)
return (select concat_ws('---',book_name,store) from bookinfo where val = book_id);

select show_name_store(1);

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_mysql_21

== 简化以上方法 实际运用建议采用以下方法==

-- 删除自定义函数
drop FUNCTION show_name_store;

-- 创建自定义函数 定义变量 接收函数的返回值

delimiter //
create FUNCTION show_name_store(val int)
returns varchar(30)
begin 
declare result varchar(40); -- 定义变量
select concat_ws('---',book_name,store) into result  from bookinfo where val = book_id;
return result;
end //
delimiter;

-- 调用函数 返回结果
select show_name_store(4);

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQL 定义数组 for循环_22


【4.1】mysql流程控制语句

loop: 圈,环; [医]宫内避孕环; 回路; 弯曲部分;
repeat :重说;重申;再做;重复做;在口中留下余味;重复;重

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_数据库_23


【4.2】mysql IF语句

== IF语句==

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_图形化管理工具SQLyog_24


MySQL 定义数组 for循环 mysql自定义函数遍历结果集_mysql_25

== 图书信息表==

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_数据库_26

读者信息表

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQLWorkbench_27


== 借阅信息表==

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_图形化管理工具SQLyog_28

-- 第一题  注意分号 和不要漏写
delimiter //
create FUNCTION show_level(cid char(18))
returns varchar(10)
begin 
declare lev varchar(10);
declare money decimal(7,3);
select balance into money from readerinfo where card_id = cid;
if money >= 500 then 
 set lev = '金牌会员';
elseif money >=300 then 
 set lev = '高级会员';
elseif money >= 200 then 
 set lev = '普通会员';
else 
 set lev ='非会员,余额不足';
end if;
return lev;
end //
delimiter ; 

-- 查询
select show_level(card_id) ,balance from readerinfo;

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQL 定义数组 for循环_29


【4.3】mysql CASE语句

statement :  陈述;声明;报表;报道;账单;结算单;官方声明;

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_图形化管理工具SQLyog_30

delimiter //
create FUNCTION show_case(cid char(18))
returns varchar(10)
begin 
declare a varchar(10);
declare money DECIMAL(7,3);
declare num int;
select balance into money from readerinfo where card_id = cid;
set num = truncate(money/100,0); -- 截断函数 保留整数
case num
when 0 then set a ='非会员,余额不足';
when 1 then set a='非会员,余额不足';
when 2 then set a= '普通会员';
when 3 then set a='等级会员';
when 4 then set a='高级会员';
else set a= '金牌会员';
end case;
return a;
end //
delimiter; 
-- 查询
select show_case(card_id),balance from readerinfo;

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQL 定义数组 for循环_31


MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQL 定义数组 for循环_32

delimiter //
create FUNCTION show_case2(cid char(18))
returns varchar(10)
begin 
declare a varchar(10);
declare money DECIMAL(7,3);
select balance into money from readerinfo where card_id = cid;
case 
when money>=500 then set a='金牌会员';
when money>=200 then set a= '普通会员';
when money>=300 then set a='高级会员';
else set money= '非会员,余额不足';
end case;
return a;
end //
delimiter; 
-- 查询
select show_case2(card_id),balance from readerinfo;

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_数据库_33


【4.4】mysql WHILE循环语句

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_mysql_34

-- 求N以内的数求和
delimiter //
create function test1(n int)
returns int
begin 
	declare num int default 0;
	declare sum int default 0;
while num<n do
	set num = num + 1;
	set sum = sum + num;
end while;
return sum;
end//
delimiter ;

select test1(3);

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQL 定义数组 for循环_35


【4.5】mysql LOOP循环语句

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQLWorkbench_36

-- 求N以内的数求和
delimiter //
drop function if exists test1//
create function test1(n int)
returns int
begin 
	declare num int default 0;
	declare sum int default 0;
label:loop
	set num = num + 1;
	set sum = sum + num;
	if(num>=n) then 
		leave label; -- 退出loop循环
	end if;
end loop label;
return sum;
end//
delimiter ;

select test1(3);

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQLWorkbench_37


【4.6】mysql REPEAT循环语句

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQLWorkbench_38

-- 求N以内的数求和
delimiter //
drop function if exists test1//
create function test1(n int)
returns int
begin 
	declare num int default 0;
	declare sum int default 0;
repeat
	set num = num + 1;
	set sum = sum + num;
until num>=n
end repeat;
return sum;
end//
delimiter ;

select test1(3);

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQL 定义数组 for循环_39


== mysql 还未结束,生命不息,创作不息,程序员保持:/😕😕:/==

MySQL 定义数组 for循环 mysql自定义函数遍历结果集_MySQL 定义数组 for循环_40