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

温馨提示:本系列博文已经同步到 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 教程 <- 目录 —— ☆☆☆ ————

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏linux、Python学习

Shell的18条常用命令整理

Linux上的文件以.开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls -a除了显示一般文件名外,连隐藏文件也会显示出来。

790
来自专栏娱乐心理测试

duplicate symbols for architecture arm64的问题结决方法

2114
来自专栏点滴积累

python基础操作以及hdfs操作

一、前言        作为一个全栈工程师,必须要熟练掌握各种语言。。。HelloWorld。最近就被“逼着”走向了python开发之路,大体实现的功能是写一...

3808
来自专栏程序员互动联盟

【专业技术】揭秘安卓浏览器如何注入javascript脚本

Android中向webview注入js代码可以通过webview.loadUrl("javascript:xxx")来实现,然后就会执行javascript后...

4774
来自专栏北京马哥教育

Shell的18条常用命令整理

? 作者 | junmail 来源 | CSDN社区 云豆贴心提醒,本文阅读时间8分钟,文末有秘密! 1、 ls: 类似于dos下的dir命令 ...

3904
来自专栏coding

redis字符串类型详解及应用场景分析

1173
来自专栏我是攻城师

Solr配置maxBooleanClauses属性不生效原因分析

2256
来自专栏晓晨的专栏

IdentityServer Topics(2)- 定义资源

1053
来自专栏应兆康的专栏

每天一个Linux命令(1)—— ls

ls ls命令用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。 语法 ls(选项)(参数) ...

36710
来自专栏Django Scrapy

Pychram下如何使用virtualenv

打开设置 ? Preferences 打开Project pythonProjects ---> Project interpreter 点击画圈的地方 齿轮按...

2889

扫码关注云+社区