关闭

史上最简单的 MySQL 教程(四十二)「代码执行结构」

标签: MySQL执行结构SQL编程if分支while循环
909人阅读 评论(3) 收藏 举报
分类:

温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋StarFork,纠错。

代码执行结构

在 MySQL 编程中,代码的执行结构有三种,分别为:

  • 顺序结构;
  • 分支结构;
  • 循环结构。

顺序结构,自不必多说,在本文中,我们着重了解分支结构和循环结构。

分支结构

分支结构:事先准备多个代码块,通过判断条件是否满足,执行对应的代码。

在 MySQL 中,只有if分支结构,其基本语法为:

if 条件判断 then
    -- 满足条件时,要执行的代码
else -- 可以没有 else 语句
    -- 不满足条件时,要执行的代码
end if;

接下来,我们利用触发器和if分支,完成这样的需求:

  • 在生成订单前,判断商品的库存是否满足,如果满足,则插入订单;否则,插入失败。

依次执行如下 SQL 语句,进行测试:

-- 查看商品表
select * from goods;
-- 查看订单表
select * from orders;
-- 修改语句结束符
delimiter $$
-- 创建触发器
create trigger before_order before insert on orders for each row
begin
	-- 判断商品库存是否满足订单
	-- 通过商品表获取商品库存量
	select inventory from goods where id = NEW.goods_id into @inventory;
	-- 比较库存
	if @inventory < NEW.goods_number then
		-- 库存不够,由于触发器不能阻止事件发生,因此我们只能暴力报错
		insert into XXX values(XXX);
	end if;
end
$$
-- 恢复语句结束符
delimiter ; 

01

-- 插入订单
insert into orders values(null, 1, 1000);
-- 查看商品表
select * from goods;
-- 查看订单表
select * from orders;

02

-- 插入订单
insert into orders values(null, 1, 100);
-- 查看商品表
select * from goods;
-- 查看订单表
select * from orders;

03

如上图所示,虽然在报错的时候,没有给出友好的提示信息,但我们已经实现了该需求。

循环结构

循环结构:表示某段代码在指定条件下进行重复执行动作。

在 MySQL 中,没有for循环,仅有while循环、loop循环和repeat循环,呃,还有一种非标准的goto循环,在此我们仅介绍while循环,其基本语法为:

while 条件判断 do
    -- 满足条件时要执行的代码
    -- 变更循环条件
end while;

在使用循环结构的时候,我们经常需要对循环进行控制,即在循环结构内部进行判断和控制。虽然在 MySQL 中没有continuebreak,但是有其替代关键字:

  • iterate:迭代,类似于continue,表示结束本次循环,不执行后续步骤,直接开始下一次循环;
  • leave:离开,类似于break,直接结束整个循环。

上述两个关键字的使用方法为,

  • 基本语法iterate/leave + 循环名称;

因此,在我们定义循环结构的时候,就需要进行略微的修改了,具体形式如下:

循环名称: while 条件判断 do
    -- 满足条件时要执行的代码
    -- 变更循环条件
    iterate/leave 循环名称; -- 控制循环语句
end while;

由于触发器只能执行简单的一次触发动作,因此不适合演示循环结构。循环结构需要结合函数进行使用,所以在介绍函数的时候,我们再来体验循环结构的魅力。


温馨提示:符号[]括起来的内容,表示可选项;符号+,则表示连接的意思。


———— ☆☆☆ —— 返回 -> 史上最简单的 MySQL 教程 <- 目录 —— ☆☆☆ ————

3
2
查看评论

mysql语句之begin end 多重嵌套

语法: [begin_label:] BEGIN [statement_list] END [end_label]   说明:   测试: DELIMITER $$ DROP PROCEDURE IF EXISTS lims_data.sp_test_4$$...
  • bai_lu_sz
  • bai_lu_sz
  • 2013-04-10 15:41
  • 5370

mysql支持调用begin end来执行代码块吗?

我在mysql官方提供的查询浏览器中编辑脚本如下: begin     delete oms.* from OMS_RES_ROLE oms where oms.role_id = '1';     insert into OMS_RES_...
  • werewolf_ytbi
  • werewolf_ytbi
  • 2012-05-15 18:33
  • 9779

mysql 命令行中执行sql的几种方式

1.直接输入sql执行 mysql> select now(); +---------------------+ | now()             &#...
  • lwei_998
  • lwei_998
  • 2013-09-18 14:15
  • 33625

JDBC连接MySQL基本步骤代码块

另附连接驱动和安装包(官方下载需要账号)。
  • wulianzhazha
  • wulianzhazha
  • 2017-03-10 10:18
  • 134

史上最简单的 MySQL 教程(四十二)「代码执行结构」

温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋Star、Fork,纠错。 代码执行结构 在 MySQL 编程中,代码的执行结构有三种,分别为: 顺序结构; 分支结构; 循环结构。 顺序结构,自不必多说,在本文中,我们着重了解分...
  • qq_35246620
  • qq_35246620
  • 2018-01-03 22:06
  • 909

史上最简单的 MyBatis 教程

1 前言  MyBatis 源于 Apache 的一个开源项目 iBatis,而 iBatis 一词则来源于“internet”和“abatis”的组合,2010年这个项目由 Apache Software Foundation 迁移到了 Google Code,并且改名为MyBatis ,2013...
  • qq_35246620
  • qq_35246620
  • 2017-02-01 00:49
  • 6604

史上最简单的SpringCloud教程 | 第一篇: 服务的注册与发现(Eureka)

一、spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。另外说明spring cloud是基于spri...
  • fend0875
  • fend0875
  • 2017-04-21 08:39
  • 1567

nodejs+mysql模块化实例代码

  • 2016-06-14 15:08
  • 2.13MB
  • 下载

【一步一个脚印】Tomcat+MySQL为自己的APP打造服务器(4)完结篇

在这个系列的前几篇文章中,从最初简单的服务器环境搭建、MySQL数据库的安装、Servlet 的原理及使用、数据库的连接及CURD操作、Android和服务器GET/POST数据交互,到最后JSon格式报文的使用,我们已经将这个过程完整的走完一遍,但是其中用的代码都是片段式的,没有一个清晰的结构,甚...
  • a_running_wolf
  • a_running_wolf
  • 2017-05-09 18:06
  • 3706

史上最简单的SpringCloud教程

转载请标明出处:  http://blog.csdn.net/forezp/article/details/70148833  本文出自方志朋的博客 错过了这一篇,你可能再也学不会 Spring Cloud 了!Spring Boot做为下一代 web 框架,Spr...
  • zhongzh86
  • zhongzh86
  • 2017-11-22 14:15
  • 50
    个人资料
    • 访问:955721次
    • 积分:12868
    • 等级:
    • 排名:第1270名
    • 原创:258篇
    • 转载:85篇
    • 译文:11篇
    • 评论:950条
    博主的 GitHub 账号
    GitHub : Charies Gavin

        鉴于 CSDN 糟糕的用户体验,博主会将一些优质的文章迁移到 Charies Gavin's Blog  欢迎大家在 GitHub 上 Follow 博主,以及 Fork、Star、Watch 博主的项目。


      青春不老 奋斗不止


      好学若饥虚心若愚
    博客专栏