【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
版权归原作者 红客白帽 所有, 如有侵权,请联系我们删除。
版权归原作者 红客白帽 所有, 如有侵权,请联系我们删除。