存储过程和函数

  • 一、存储过程
  • 二、函数
  • 三、流程控制结构

存储过程和函数:类似于java中的方法
好处
1、提高代码的重用性
2、简化操作

一、存储过程

含义:一组预先编译号的sql语句的集合,理解成批处理语句
好处
1、提高代码的重用性
2、简化操作
3、减少了编译次数并且减少了和数据库服务器的连接次数,提高效率

创建语法:
create procedure 存储过程名(参数列表)
begin
存储过程体(一组合法的sql语句)

end
注意:
1、参数列表包含三部分
参数模式 参数名 参数类型
举例:
in stuname varchar(20)

参数模式:
in:该参数可以作为输入,也就是该参数需求调用方传入值
out:该参数可以作为输出,也就是该参数可以作为返回值
inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值

如果存储过程仅仅只有一句话,begin end 可以省略
存储过程体中每条sql语句的结尾要求必须加分号
存储过程的结尾可以使用delimiter重新设置

调用语法
call 存储过程名(实参列表)
调用in模式的参数:call sp1(‘值’)
调用out模式的参数:set @name;call sp1(@name);
调用inout模式的参数:set @name=值; call sp1(@name);select @name

1)空参列表
案例1:插入到admin表中五条记录
delimiter $
create procedure myp1()
begin
insert into admin(userName,‘password’)
values(‘jion’,‘123’),(‘rose’,‘123’),(‘jack’,‘123’);
end $

调用
call myp1() $

2)创建带in模式参数的存储过程
案例1:创建存储过程实现,根据女神名,查询对应的男神信息
create procedure myp2(in beautyName varchar(20))
begin
select boys.* from boys
right join beauty b on boys.id = b.boyfriend_id
where b.name = beautyName;
end $

案例2:创建存储过程实现,用户是否登录成功
create procedure myp3(in userName varchar(20),in pwd varchar(20))
begin
declare result varchar(20) default ‘’;#声明并初始化

select count(*) into result #赋值
from admin
where admin.userName = userName
and admin.pwd=pwd;#select result;#使用
select if(result>0,'成功','失败');#使用

end $

3)创建带out模式的存储过程
案例1:根据女神名,返回对应的男神名
create procedure myp4(in beatyName varchar(20),out boyName varchar(20))
begin
select boys.boyName into boysName
from boys
inner join beauty b on boys.id = b.boyfriend_id
where b.name=beautyName;
end$
set @bName
call myp5(‘小昭’,@bName)$
select @bName$

案例2:根据女神名,返回对的男神名和男神魅力值
create procedure myp5(in bName varchar(20),out boyName varchar(20),out cp int)
begin
select boys.boyName,boys.cp into boysName, cp
from boys
inner join beauty as b on b.boyfriend_id = boys.id
where b.name = bName;
end $
call myp5(‘小昭’,@bName,@cp)$

4)创建带inout模式参数的存储过程
案例1:传入a和b两个值,最终a和b都翻倍并返回
create procedure myp6 (inout a int, inout b int)
begin
set a = a2;
set b = b
2;
end $

set @m=10$
set @n=20$

call myp6(@m,@n)$
select @m,@n

删除存储过程:只能一次删除一个
语法: drop procedure 存储过程名

查看存储过程的信息
show create procedure myp2(存储过程名)

二、函数

含义:一组预先编译好的sql语句的集合,理解成批处理语句
1、提高代码的重用性
2、简化操作
3、减少了编译次数并且减少了和数据库服务器的连接次数,提高效率

存储过程:可以有0个返回,也可以有多个返回;适合做批量插入、批量更新
函数:有且仅有1个返回;适合做处理数据后返回一个结果

1、创建语法
create function 函数名(参数列表)returns 返回类型
begin
函数体
end
注意:
1)参数列表包含两个部分:参数名、参数类型

2)函数体:肯定会有return语句,如果没有会报错
如果return语句没有放在函数体的最后也不会报错,但不建议

return值

3)函数体中仅有一句话,则可以省略begin end
4)使用delimiter语句设置结束标记

delimiter $;

2、调用语法
select 函数名(参数列表)

案例1:无参有返回,返回公司的员工个数
create function myf1() returns int
begin
declare c int default 0;#定义局部变量
select count(*) into c#赋值
from employees;
return c;
end $

select myf1() $

案例2:有参数有返回,根据员工名,返回他的工资
create function myf2(empName varchar(20)) returns float
begin
set @sal=0;#定义用户变量
select salary into @sal
from employees
where name = empName;
return @sal;
end$
select myf2(’’)$

create function myf3(deptName varchar(20)) returns double
begin
set @sal = 0;
select avg(salary) into @sal
from employees as e
inner join department d on d.id=e.department_id
where d.department_name = deptName;
return @sal;
end $

3、查看函数
show create function myf3;

4、删除函数
drop funtion myf3;

三、流程控制结构

顺序结构:程序从上往下依次执行
分支结构:程序从两条或多条路径中选择一条去执行
循环结构:程序在满足一定条件的基础上,重复执行一段代码

1、分支结构
if函数
功能:实现简单的双分支
语法:
if(表达式1,表达式2,表达式3)
执行顺序:如果表达式1 成立,则if函数返回表达式2的值,否则返回表达式3的值
应用:任何地方

2、case结构
情况1:类似于java中的switch语句,一般用于实现等值判断
语法:
case 变量、表达式、字段
when 要判断的值 then 返回的值1或语句1;
when 要判断的值 then 返回的值2或语句2;
···
else 要返回的值n或语句n;
end case;

情况2:类似于java中的多重if语句,一般用于实现区间判断
语法:
case
when 要判断的条件1 then 返回的值1或语句1;
when 要判断的条件2 then 返回的值2或语句2;
···
else 要返回的值n或语句n;
end case;

特点:

可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,begin end中或begin end 的外面
可以作为独立的语句去使用,只能放在begin end中

如果when中的值满足或条件成立,则执行对应的then后面的语句,并且结束case
如果都不满足,则执行else中的语句或值
③else可以省略,如果省略了,并且所有when条件都不满足,则返回null
案例:创建存储过程,根据传入的成绩,来显示等级,比如传入的成绩:90-100显示A,显示80-90显示B,显示60-80显示C,否则显示D
create procedure test_case(in score int)
begin
case
when score>=90 and score<=100 then select ‘A’;
when score>=80 then select ‘B’;
when score>=60 then sekect’C’;
else select ‘D’;
end case;
end $

call test_case(95)$

功能:实现多重分支
语法:
if 条件1 then 语句1;
elseif 条件2 then 语句2;
···
else 语句n
endif
应用在 begin end 中
案例:根据传入的成绩,来显示等级,比如传入的成绩:90-100显示A,显示80-90显示B,显示60-80显示C,否则显示D

create function test_if(score int) returns char
begin
if score >=90 and score <=100 then return ‘A’;
elseif score>=80 then return ‘B’;
elseif score>=60 then return ‘C’;
else return ‘D’;
end if;
end

3、循环结构
分类
while、loop、repeat
循环控制:
iterate类似于continue,继续,结束本次循环,续集下一次
leave类似于break,跳出,结束当前所在的循环

1)while
语法:
【标签:】while 循环条件 do
循环体
end while【标签】

2)loop
语法
【标签:】loop
循环体
end loop 【标签】
可以用来模拟简单的死循环

3)repeat
语法:
【标签:】repeat
循环体
until 结束循环的条件
end repeat【标签】

1)没有添加循环控制语句
案例:批量插入,根据次数插入到admin表中的多条记录

create procedure pro_while(in inserCount int)
begin
declare i int deafult 1;
while i<=inserCount do
insert into admin(userName,pwd)values(concat(‘Roes’,i),‘123’)
set i=i+1;
end while;
end $
call pro_while(100)$

2)添加leave语句
案例:批量插入,根据次数插入到admin表中的多条记录,如果次数大于20则停止
create procedure test_while (int insertCount int)
begin
declare i int default 1;
a:while i<=insertCount do
inser t into admin(userName,pwd) values(concat(‘xiaohua’,i),‘123’);
if i>=20 then leave a;
end if
set i=i+i;
end while a
end $
call test_while(100)$

3)添加
create procedure test_while (int insertCount int)
begin
declare i int default 0;
a:while i<=insertCount do
set i=i+1;
if mod(i,2)!=0 then iterate a;
end if;
inser t into admin(userName,pwd) values(concat(‘xiaohua’,i),‘123’);
end while a
end $

CREATE PROCEDURE test_randstr_insert(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;#定义一个循环变量i,表示插入的次数
DECLARE str VARCHAR(20) DEFAULT ‘asdasdasd’;
DECLARE startIndex INT DEFAULT 1;#代表起始索引
DECLARE len INT DEFAULT 1;
WHILE i <=inserCount DO
SUBSTR(str,startIndex)
SET len = FLOOR(RAND()*(26-startIndex+1)+1))#产生一个随机的整数,代表截取长度,
SET startIndex=RAND()*20+1;#产生一个随机的整数,代表起始索引1-20
INSERT INTO stringcontet(content) VALUES(SUBSTR(str,startIndex,len));
SET i=i+1;#循环变量更新

AND $

mysql——存储过程和函数相关推荐

  1. WebDay18 MySQL存储过程 存储函数 触发器 事务

    MySQL存储过程 存储函数 触发器 事务 一.MySQL存储过程和函数 1.存储过程和函数的概念 2.存储过程和函数的好处 3.存储过程和函数的区别 4.创建存储过程 5.调用存储过程 6.查看存储 ...

  2. mysql存储过程与函数、触发器、游标、变量等知识点详解

    引言:该文章仅供自己学习整理 mysql执行顺序 语法顺序 写sql的关键字顺序 select [distinct] from join(如left join) on where group by h ...

  3. Mysql学习总结(11)——MySql存储过程与函数

    2019独角兽企业重金招聘Python工程师标准>>> 摘要:存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程 ...

  4. mysql 存储过程与函数_12 MySQL存储过程与函数

    存储过程和函数 存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合. 调用存储过程和函数可以简化应用开发人员的工作,减少数据在数据库和应用服务器之间的传输,提高数据处理的效率. 存储过 ...

  5. mysql存储过程或函数中传入参数与表字段名相同引发的悲剧

    真实案例.如下的一个存储过程: create procedure Apple(in user_id int) begin delete from users where user_id = user_ ...

  6. MySQL存储过程和函数示例

    存储过程和函数是在数据库中定义的一些SQL语句的集合,然后直接调用这些存储过程和函数来执行定义好的SQL语句.存储过程和函数可以避免开发人员重复的编写相同的SQL语句,而且存储过程和函数是在MySQL ...

  7. 争议?MySQL存储过程与函数,封装,体,完整详细可收藏

    文章目录 1. 存储过程概述 2. 创建存储过程 3. 调用存储过程 4. 存储函数的使用 5. 存储过程和函数的查看.修改.删除 6. 关于存储过程使用的争议 MySQL从5.0版本开始支持存储过程 ...

  8. MySql存储过程与函数

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行 ...

  9. [mysql]存储过程/存储函数

    [Stored Procedure /Stored Function] 存储过程 定义 语法分析: 调试 效果比较 存储函数 应用 语法分析: 两者对比 存储过程和函数的查看.修改.删除 查看 修改 ...

  10. 【MySQL学习】4、MySQL存储过程和函数

    文章目录 1.存储过程和函数概念 2.存储过程的使用 (1)创建存储过程 (2)调用存储过程 (3)查看存储过程 (4)删除存储过程 3.存储过程的语法 (1)声明变量 (2)if条件判断 (3)传递 ...

最新文章

  1. 数据库和区块链的异同
  2. Android studio中2种build.gradle文件介绍
  3. 一个完整的python项目源码-一个Python开源项目-哈勃沙箱源码剖析(下)
  4. make -j 的并行任务个数选择
  5. 二十六、深入Node.js中的文件系统fs模块
  6. leetcode 665. 非递减数列(贪心算法)
  7. 文件加密及解密openssl
  8. 树莓派静态IP配置方法
  9. 配置hiveserver2访问hive
  10. 2019年最佳作家奖
  11. js阻止鼠标右击_使用JS 禁止键盘快捷方式和禁止鼠标右键操作弹窗提示
  12. tomcat配置项目的接种方式
  13. mysql 1136 column_安装mysql遇到ERROR: 1136 Column count doesn't match value count at row 1
  14. Mysql 安装PMM监控 (一台主机安装)
  15. Mac电脑快速切换用户教程
  16. 台式电脑打不开计算机c盘,电脑打不开显示C盘损坏怎么办
  17. 计算机及应用成绩表,Excel的基本应用—制作成绩表_计算机软件及应用_IT计.ppt...
  18. 100种送给老婆的生日礼物,看看有没有你需要的!
  19. 历年四级作文真题范文
  20. UNITY OCULUS QUEST开发入门教程 1 - 准备篇

热门文章

  1. 超文本传输协议HTTP/1.1
  2. claim acclaim proclaim exclaim
  3. 亚马逊云科技2022年6月新服务新功能回顾
  4. Prometheus GPU 监控
  5. C# SolidWorks 二次开发 API---获取所有特征名称思路2
  6. 用CSS3制作照片墙
  7. NotePad++设置背景颜色和字体颜色
  8. SuperScan扫描端口
  9. 京东:获得商品详情原数据 API
  10. 电脑重装系统注册表恢复方法