文章链接:https://codemouse.online/archives/354846877687

存储过程

存储过程和自定义函数是事先经过编译并存储在数据库中的一段SQL语句集合
存储过程参数可以使用 in out inout 函数只能使用in
函数必须要有返回值 存储过程没有返回值

  • 无参存储过程

–查找平均花费高的两个客户

create procedure getMaxAvgCost()
beginselect customer,avg(price)from ordersgroup by customerorder by avg(price) desclimit 2;
end;

–调用存储过程
call getMaxAvgCost();
–修改
alter procedure getMaxAvgCost();
–查看存储过程信息
show create procedure getMaxAvgCost;
–删除存储过程
drop procedure getMaxAvgCost;

  • 带参存储过程

–获取指定日期最大单笔订单

create procedure getMaxByDate(in odate date)
beginselect customer,max(price)from  orderswhere orderdate=odate;
end;
使用:call getmaxbydate('2018-9-21');

–使用存储过程插入数据

create procedure insertTbOrders(
in oid int,in oprice int,in odate date,
in ocus varchar(22))
begin
insert into orders values(oid,oprice,odate,ocus);
select * from orders where id=oid;
end;call insertTbOrders(8,400,'2018-9-28','danny');
call insertTbOrders(7,200,'2018-9-28','danny');

–删除
create procedure deleteOrders(in oid int)
begin
delete from orders where id=oid;
end;

call deleteOrders(7);

变量

数据在内存中存储可以变化的值或者一个名字
局部变量
声明用declare,可以用default来指定默认值

create procedure getsum(in a int, in b int)
begin
declare c int default 0;
set c=a+b;
select c as '和';
end;call getsum(21,34);

–用户变量
作用于当前整个连接
set @x=10;
set @y=24;
select @sum:=(@x+@y) as sum;

–会话变量
作用域限于当前客户端连接
show session variables;

–全局变量
作用域为整个服务,但不能跨重启(一个@是用户变量,两个@是全局)
select @@version;

自定义函数(可以省略in)

返回值写返回类型

create function getGrade(mark int)
returns varchar(20)
begin
return(case floor(mark/10)when 5 then '不及格'when 6 then '继续努力'when 7 then '成绩良好'else '成绩优秀'end
);
end;select getGrade(100);

流程控制

  • begin… end程序块语句
    将多条sql语句封装起来构成程序块
create procedure test1()
begin
declare x int;
declare y date;
beginset x=100;set y='2018-9-28';select x,y;
end;
end;call test1;
  • if判断语句
    用于条件判断,if语句要用end if结束
create procedure test2( in x int)
begin
if x>100 thenselect 'perfect';
elseif x=100 thenselect 'great';
else select 'good';
end if;
end;
  • case分支语句
    计算条件列表并返回多个可能结果表达式
create procedure test3(in score int)
begin
case score
when 1 thenselect 'A';
when 2 thenselect 'B';
when 3 thenselect 'C';
else select 'D';
end case;
end;case test3(2);
  • while循环语句
    设置重复执行sql语句或语句块的条件,只要指定的条件为真,就重复执行
create procedure test4(out sum int)
begin
declare i int default 1;
declare s int default 0;
while i<=10 doset s=s+i;set i=i+1;
end while;
set sum=s;
end;call test4(@s);
select @s;
  • loop循环语句
    没有循环条件 通过leave退出循环(leave相当于break)
create procedure test5()
begin
declare i int default 0;
s:loopset i=i+1;if i=11 thenleave s;end if;
end loop;
select i;
end;
  • repeat循环语句
    先执行一次循环体,在判断循环条件,为真退出循环,否则继续执行循环
create procedure test6()
begin
declare i int default 0;
repeatset i=i+1;
until i>11
end repeat;
select i;
end;

mysql存储过程,函数,变量与流程控制相关推荐

  1. MySql基础篇——变量、流程控制与游标

    一.变量 在mysql数据库中,变量分为系统变量以及用户自定义变量. 1.系统变量 1.1 介绍 系统变量由系统定义,属于服务器层面.启动mysql服务,生成mysql服务实例期间,mysql将为my ...

  2. MySql基础篇---004 其它数据库对象篇:视图,存储过程与函数,变量、流程控制与游标 ,触发器

    第14章_视图 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 常见的数据库对象 对象 描述 表(TABLE) 表是存储数据的逻辑单元,以行和列的形 ...

  3. mysql 源码 缓存_MySQL源码:MYSQL存储过程/函数的分析原理及缓存机制

    前言:我个人认为,有关MYSQL存储过程/函数在MYSQL中的实现比较粗糙,可扩展性不够好,其实现的耦合性太高,所以主要讲一些它的原理方面的内容,但有可能在某些方面理解不够好或者有些不正确的地方,欢迎 ...

  4. MySQL 存储过程的变量

    MySQL  存储过程的变量 变量是一个命名数据对象,变量的值可以在存储过程执行期间更改.我们通常使用存储过程中的变量来保存直接/间接结果. 这些变量是存储过程的本地变量. 注意:变量必须先声明后,才 ...

  5. 一条一条来,MySQL变量、流程控制与游标,完整详细可收藏

    文章目录 1. 变量 2. 定义条件与处理程序 3. 流程控制 4. 游标 MySQL8的新特性-全局变量的持久化 1. 变量 在MySQL数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间 ...

  6. Mysql基础篇(8)—— 变量、流程控制和游标

    变量 变量分为系统变量和用户自定义变量 系统变量 由系统定义,属于服务器层面.这些系统变量定义了当前Mysql服务实例的属性.特征.系统变量分为全局系统变量(需要加global关键字)和会话级系统变量 ...

  7. 数据库——python操作MySQL、修改表SQL语句、视图、触发器、存储过程、事务、流程控制、常见函数、索引

    文章目录 一.python操作MySQL 1.pymysql模块 1.基本使用 2.sql注入问题 3.二次确认 二.修改表SQL语句 1.修改表的名字 rename 2.添加字段 add 3.修改字 ...

  8. mysql 普通sql流程控制,【mysql的编程专题①】流程控制与其他语法

    流程控制与内置函数,一般用在select的field字段上,或者用在函数,存储过程,触发器中; 如果用在select上就会随着query出来的row来隐式迭代; 注释与语句结束符 语句结束符 默认有两 ...

  9. mysql 存储过程 varchar 赋值,mysql 存储过程中变量的定义与赋值操作

    一.变量的定义 mysql中变量定义用declare来定义一局部变量,该变量的使用范围只能在begin...end 块中使用,变量必须定义在复合语句的开头,并且是在其它语句之前,也可以同时申明多个变量 ...

最新文章

  1. html导出excel时换行符,ASP.NET 导出到Excel时保留换行的代码
  2. 今天的新坑 ubuntu18.04安装docker
  3. #论文 《ImageNet Classification with Deep Convolutional Neural Networks》
  4. 各大视觉技术竞赛冠军及 TOP 方案集锦(持续更新)
  5. 【腾讯面试题】Java集合:List、Set以及Map
  6. android 自定义对话框 demo,自定义dialog对话框获取EditText数据demo
  7. Hive之架构 功能
  8. angular 实现无限极联动下拉
  9. Sophos 修复 Cyberoam OS 中的 SQL 注入漏洞
  10. 2016-11-15NOIP模拟赛
  11. java和eova的关系_Eova 1.1 发布,Java Web 快速开发平台
  12. Simulink仿真入门到精通(八) M语言对Simulink模型的自动化操作及配置
  13. 简单的markdown在线解析服务-pro
  14. 华为路由器AAA配置与管理
  15. 服务器无法取消指令方块显示,我的世界服务器如何关掉命令方块的提示(如图)?...
  16. Linux中合并多个Pdf文件(使用pdfunite,合并比较简单)
  17. python打包二进制文件(pyd\dll\exe)
  18. 大数据建设意义_从宜信中台构架看企业大数据建设的意义
  19. v2视频服务器退出系统怎么启动,v2会议视频系统
  20. ADI Blackfin DSP处理器-BF533的开发详解24:触摸屏的实现和应用(含源代码)

热门文章

  1. MySQL 到 ClickHouse 实时数据同步实操分享
  2. 视频转动漫软件有哪些?小编亲测6款工具,1秒穿越漫画场景
  3. java模拟电梯程序_Java编写的电梯模拟系统《结对作业》
  4. java关键字的用法_JAVA总结(一)-----关键字分类及使用
  5. Excel·VBA文件重命名、移动
  6. 论文|翻译——行为数据挖掘(持续更新!)
  7. Win7出现无法启动无线服务,出现无线网络未连接问题的解决方案
  8. 微习惯-CH1摘抄和即时正反馈
  9. 58同城CTO邢宏宇:云服务助力企业多元化飞速发展
  10. CPU是计算机的大脑英语,走进PC的大脑:CPU知识全面剖析