当前位置: 首页 > news >正文

潍坊做网站张家口/重要新闻

潍坊做网站张家口,重要新闻,如何查看网站是否备案,企业标志logo设计免费一 前言本篇内容是关于mysql储存过程的知识,学习本篇的基础是知识追寻者之前发过的文章(公众号读者看专辑)公众号:知识追寻者知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)二 储存过程2.1 储存过程的概念我们经常…

一 前言

本篇内容是关于mysql储存过程的知识,学习本篇的基础是知识追寻者之前发过的文章(公众号读者看专辑)

公众号:知识追寻者知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)

二 储存过程

2.1 储存过程的概念

我们经常使用的SQL查询语句都是单条语句,如果要使用多条语句达到一个目的就显得力不从心了,储存过程就是使用多条语句完成业务的操作,你可以理解为linux脚本编程类似,window的批处理文件那样;简单的定义储存过程就是多条SQL的集合;

我们使用储存过程能够简化复杂的单条SQL,相比于单条复杂的SQL极大提高了性能;如果表结构发生变化只需要改变储存过程使用到SQL语句的表名,如果业务逻辑发生变化,只需要跳转储存过程即可,具有很强的灵活性;建立一次储存过程,即可使用,不用反复建立,保证开发人员使用到都是相同的储存过程,保证数据可靠性;总之使用储存过程,简单,灵活,安全可靠,性能好;

2.2 存储过程语法创建存储过程

Create PROCEDURE 储存过程名称 (参数列表)

begin

过程体

end;参数列表

IN 表示输入; 示例 IN var1 Decimal(6,2)

OUT 表示输出;示例 IN var2 Decimal(6,2)

INOUT 表示输入输出;示例 IN var3 Decimal(6,2)

变量

declare 变量名称 变量类型 [default value]

执行存储过程

call 储存过程名称

删除储存过程

DROP PROCEDURE 储存过程名称

赋值

使用 set 和 select into 语句为变量赋值。

set @var := 20

select sum(price) into total from table_name

if 语句

f 条件 then

表达式

[elseif 条件 then

表达式]

...

[else

表达式]

end if;case语句

CASE 值 WHEN 匹配值 THEN 结果

[WHEN 匹配值 THEN 结果]

......

[ELSE 结果]

END

while语句

[开始标签:]while 条件 do

循环体

[结尾标签]

end while ;

loop 语句

[开始标签:] loop

语句体

[结尾标签]

end loop;

iterate/ leave语句

其是通过标签可以实现;iterate 表示迭代, leave表示离开

repeat语句

repeat

--循环体until 循环条件

end repeat;

tip : 如果你是用命令行学习,在写多行SQL的时候 使用 // 可以实现换行哟!

2.3 储存过程示例

我们准备表如下,一个订单明细表;

CREATE TABLE `oder_detail` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',

`detail_name` varchar(255) DEFAULT NULL COMMENT '订单明细',

`price` decimal(10,2) DEFAULT NULL COMMENT '价格',

`oid` int(11) DEFAULT NULL COMMENT '订单id',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='订单明细表';

准备数据如下

INSERT INTO `zszxz`.`oder_detail`(`id`, `detail_name`, `price`, `oid`) VALUES (1, '毛巾', 20.00, 1);

INSERT INTO `zszxz`.`oder_detail`(`id`, `detail_name`, `price`, `oid`) VALUES (2, '牙膏', 15.00, 1);

INSERT INTO `zszxz`.`oder_detail`(`id`, `detail_name`, `price`, `oid`) VALUES (3, '杯子', 5.00, 1);

INSERT INTO `zszxz`.`oder_detail`(`id`, `detail_name`, `price`, `oid`) VALUES (4, '毛巾', 15.00, 2);

INSERT INTO `zszxz`.`oder_detail`(`id`, `detail_name`, `price`, `oid`) VALUES (5, '杯子', 15.00, 2);

无参储存过程

查看订单明细的所有订单名称,示例如下,跟普通的查询语句没区别;

create procedure slelect_detail()

begin

select detail_name from oder_detail;

end;

我们再调用储存过程

call slelect_detail();

此时就会打印内容如下

毛巾

牙膏

杯子

毛巾

杯子

删除储存过程

drop procedure slelect_detail;

带入参储存过程示例

现在我们需要查询oid为动态的所有订单明细名称,由于考虑到oid为动态,就是需要用户自己输入,故将oid作为入参;

create procedure slelect_detail(IN order_id INT)

begin

select detail_name from oder_detail where oid = order_id;

end;

调用储存过程,只查询oid为1的用户的订单明细名称

call slelect_detail(1);

打印内容

毛巾

牙膏

杯子

删除储存过程

drop procedure slelect_detail;

带入参和出参的存储过程示例

查询任意用户的订单明细的所有金额;定义入参订单id 为 order_id , 输出总金额为 total;

create procedure slelect_toatal_money(IN order_id INT, OUT total DECIMAL(8,2))

begin

select sum(price) into total from oder_detail where oid = order_id;

end;

调用储存过程示例

call slelect_toatal_money(1,@total);

查询 order_id 为1 总金额示例

SELECT @total;

输出为 40;

删除储存过程

drop procedure slelect_toatal_money;

2.4 if 语句示例

上节的储存过程都是单条SQL,这次我们开始使用控制流程,实现复杂的储存过程;

知识追寻者对输入的 order_id 自动加5 ,然后判断 var 是否 小于7 ,如果是就查询订单明细价格,否则查询订单明细价格总和;

create procedure slelect_toatal_money(IN order_id INT)

begin

-- 定义变量 declare var int;

-- 赋值 set var= order_id+5;

-- if 判断 if var<7 then

select price from oder_detail where oid = order_id;

else

select sum(price) from oder_detail where oid = order_id;

end if;

end;

调用

call slelect_toatal_money(1);

输出

price

20

15

5

调用

call slelect_toatal_money(2);

输出

sum(price)

30

2.6 while 语句示例

对 变量 var 进行判断,如果 var <7 就执行 查询价格语句,并且var 进行自增;

create procedure slelect_toatal_money(IN order_id INT)

begin

-- 定义变量 declare var int;

-- 赋值 set var= order_id+5;

-- while while var<7 do

select price from oder_detail where oid = order_id;

set var = var + 1;

end while;

end;

调用示例

call slelect_toatal_money(1);

输出

price

20

15

5

2.7 case语句示例

如下语句实现的效果与上面if语句实现效果一致;

create procedure slelect_toatal_money(IN order_id INT)

begin

-- 定义变量 declare var int;

-- 赋值 set var:= order_id;

-- case 判匹配 case var

when 1 then

select price from oder_detail where oid = order_id;

when 2 then

select sum(price) from oder_detail where oid = order_id;

end case;

end;

调用示例

call slelect_toatal_money(2);

输出

sum(price)

30

将参数改为1试试结果

2.8 loop语句

如果 var 小于3 就 计算 价格 + var 的值;

create procedure slelect_toatal_money(IN order_id INT)

begin

-- 定义变量 declare var int;

-- 赋值 set var:= order_id;

-- loop select_loop : loop

select price+var from oder_detail where oid = order_id;

set var = var +1;

-- 跳出循环 if var > 3 then

leave select_loop;

end if;

end loop;

end;

调用示例

call slelect_toatal_money(1);

会输出三组结果

2.7 repeat

repeat 与 while 的不同之处就是 ,while 在 执行之前检查条件,其实执行之后检查条件;

create procedure slelect_toatal_money(IN order_id INT)

begin

-- 定义变量 declare var int;

-- 赋值 set var= order_id+5;

-- repeat循环 repeat

select price from oder_detail where oid = order_id;

set var = var + 1;

until var>7

end repeat;

end;

调用示例

call slelect_toatal_money(1);

此时会输出2组相同结果;

price

20

15

5

tip: loop, while , repeat , iterate 都是循环,loop,while, repeat 功能几乎相同;iterate可以通过标签的形式调用 循环,与 leave 语句使用方式一样;

关注知识追寻者

http://www.jmfq.cn/news/4992391.html

相关文章:

  • 开一家网站建设公司有前景吗/百度如何推广网站
  • 容县网站开发/成都比较靠谱的seo
  • 商城的网站统计如何做/如何宣传自己的网站
  • jsp做网站框架/关键词搜索网站
  • 网站建设套餐/合肥seo排名优化
  • wordpress主题搜索/站长之家seo查询
  • 网站主页设计要点/爱站网站长seo综合查询工具
  • node mysql做动态网站/百度推广有效果吗
  • 初中毕业学网站开发工程师/网站分为哪几种类型
  • 网站导航栏动效怎么做的/东莞seo报价
  • 模版型网站是怎样的/网站排名提高
  • 长春建设招标网/网站查询seo
  • 长春专业网站建设价格/电商怎么做新手入门
  • 外国永久网站/厦门网络推广培训
  • 郑州做网站哪家好熊掌号/识图搜索在线 照片识别
  • 多用户网站管理系统/网络广告的特点
  • 网站开发的业务需求分析/外贸平台自建站
  • 做集群网站/搜索引擎优化排名培训
  • 政府查询网站建设方案/广州抖音seo公司
  • 韶关城乡建设部网站首页/硬件工程师培训机构哪家好
  • 找别人做网站需要注意什么/软文写手兼职
  • web做网站实训目的/百度主页网址
  • 做母婴网站/百度推广平台登录
  • 日本做暖暖视频网站试看/百度推广优化怎么做的
  • 建博客网站/百度关键词排名突然消失了
  • 网站设计优秀作品/武汉网站seo推广
  • 公司建设网站怎么作账/百度关键词排行榜
  • 建筑招工网站/itmc平台seo优化关键词个数
  • 上海高登联合建设网站/seo关键词排名在线查询
  • 拿p5.js做的网站/bilibili官网网页入口