0


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

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

在这里插入图片描述

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


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

在这里插入图片描述

select book_name ,length(book_name) from book_bak;

在这里插入图片描述


在这里插入图片描述

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

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

在这里插入图片描述

begin    

end

在这里插入图片描述


举例开始
在这里插入图片描述

-- 先看一个日期格式化的函数
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;

在这里插入图片描述

自定义函数的完整举例

-- 先看一个日期格式化的函数
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;

在这里插入图片描述


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

在这里插入图片描述

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

在这里插入图片描述


在这里插入图片描述

-- 创建带有参数的自定义函数 传入一个参数 
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);

在这里插入图片描述


【3】mysql删除自定义函数

drop function[if exists ] fun_name;

在这里插入图片描述

-- 删除自定义函数 
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;

在这里插入图片描述


【4】mysql流控的使用

在这里插入图片描述

begin ... and

在这里插入图片描述

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

在这里插入图片描述


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

在这里插入图片描述


在这里插入图片描述

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);

在这里插入图片描述

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

-- 删除自定义函数
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);

在这里插入图片描述


【4.1】mysql流程控制语句

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

在这里插入图片描述


【4.2】mysql IF语句

== IF语句==
在这里插入图片描述


在这里插入图片描述

== 图书信息表==
在这里插入图片描述

读者信息表在这里插入图片描述
== 借阅信息表==
在这里插入图片描述


-- 第一题  注意分号 和不要漏写
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 >=500thenset lev ='金牌会员';
elseif money >=300thenset lev ='高级会员';
elseif money >=200thenset lev ='普通会员';elseset lev ='非会员,余额不足';
end if;return lev;
end //
delimiter ; 

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

在这里插入图片描述


【4.3】mysql CASE语句

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

在这里插入图片描述

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 0thenset a ='非会员,余额不足';
when 1thenseta='非会员,余额不足';
when 2thenseta='普通会员';
when 3thenseta='等级会员';
when 4thenseta='高级会员';elseseta='金牌会员';
end case;return a;
end //
delimiter; 
-- 查询
select show_case(card_id),balance from readerinfo;

在这里插入图片描述


在这里插入图片描述

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>=500thenseta='金牌会员';
when money>=200thenseta='普通会员';
when money>=300thenseta='高级会员';elsesetmoney='非会员,余额不足';
end case;return a;
end //
delimiter; 
-- 查询
select show_case2(card_id),balance from readerinfo;

在这里插入图片描述


【4.4】mysql WHILE循环语句

在这里插入图片描述

-- 求N以内的数求和
delimiter //
create function test1(n int)
returns int
begin 
    declare num int default 0;declaresum int default 0;while num<n doset num = num + 1;setsum=sum + num;
end while;returnsum;
end//
delimiter ;select test1(3);

在这里插入图片描述


【4.5】mysql LOOP循环语句

在这里插入图片描述

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

在这里插入图片描述


【4.6】mysql REPEAT循环语句

在这里插入图片描述

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

在这里插入图片描述


== mysql 还未结束,生命不息,创作不息,程序员保持:/😕😕:/==
在这里插入图片描述


本文转载自: https://blog.csdn.net/m0_45463480/article/details/127457826
版权归原作者 红客白帽 所有, 如有侵权,请联系我们删除。

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

还没有评论