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

【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 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第1张图片

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


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

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

select book_name ,length(book_name) from book_bak;

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


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

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

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

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

begin    

end

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


举例开始
【MySQL 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第7张图片

-- 先看一个日期格式化的函数
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 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第8张图片

自定义函数的完整举例

-- 先看一个日期格式化的函数
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 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第9张图片


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

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

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

select a();

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


【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 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第13张图片


【3】mysql删除自定义函数

drop function [if exists ] fun_name;

【MySQL 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第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 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第15张图片


【4】mysql流控的使用

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

begin ... and

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

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

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


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

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


【MySQL 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第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 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第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 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第22张图片


【4.1】mysql流程控制语句

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

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


【4.2】mysql IF语句

== IF语句==
【MySQL 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第24张图片


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

== 图书信息表==
【MySQL 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第26张图片

读者信息表【MySQL 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第27张图片
== 借阅信息表==
【MySQL 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第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 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第29张图片


【4.3】mysql CASE语句

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

【MySQL 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第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 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第31张图片


【MySQL 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第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 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第33张图片


【4.4】mysql WHILE循环语句

【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 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第35张图片


【4.5】mysql LOOP循环语句

【MySQL 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第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 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第37张图片


【4.6】mysql REPEAT循环语句

【MySQL 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第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 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第39张图片


== mysql 还未结束,生命不息,创作不息,程序员保持:/:/==
【MySQL 第十天 自定义函数|创建和使用自定义函数|循环判断语句的使用】_第40张图片

你可能感兴趣的:(MySQL,mysql,数据库,MySQLWorkbench,图形化管理工具SQLyog,sql,1024程序员节)