【MySQL】(十一)代码执行结构

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 【MySQL】(十一)代码执行结构

代码执行结构


在 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 ;

image.png

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

image.png

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

image.png


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


循环结构


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


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

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


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


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


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


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


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

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


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


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
29天前
|
Java 关系型数据库 数据库连接
Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
24 1
|
1月前
|
存储 关系型数据库 MySQL
MySQL InnoDB数据存储结构
MySQL InnoDB数据存储结构
|
1月前
|
存储 缓存 关系型数据库
MySQL的varchar水真的太深了——InnoDB记录存储结构
varchar(M) 能存多少个字符,为什么提示最大16383?innodb怎么知道varchar真正有多长?记录为NULL,innodb如何处理?某个列数据占用的字节数非常多怎么办?影响每行实际可用空间的因素有哪些?本篇围绕innodb默认行格式dynamic来说说原理。
832 6
MySQL的varchar水真的太深了——InnoDB记录存储结构
|
6月前
|
存储 Java 关系型数据库
JSP考试质量分析系统myeclipse开发mysql数据库bs框架java编程web网页结构
JSP 考试质量分析系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发,系统主要采用B/S模式开发。
184 1
|
2月前
|
存储 关系型数据库 MySQL
MySQL技能完整学习列表5、数据库操作——1、创建数据库和表——2、修改表结构(ALTER TABLE)
MySQL技能完整学习列表5、数据库操作——1、创建数据库和表——2、修改表结构(ALTER TABLE)
183 0
|
4月前
|
存储 关系型数据库 MySQL
MySQL表空间结构与页、区、段的定义
一、概念引入 1、页 InnoDB是以页为单位管理存储空间的,在InnoDB中针对不同的目的设计了各种不同类型的页面。如下(省略了FIL_PAGE或FiL_PAGE_TYPE的前缀):
|
5月前
|
SQL 关系型数据库 MySQL
MySQL的主从结构是通过一系列的步骤搭建出来的
MySQL的主从结构是通过一系列的步骤搭建出来的
30 1
|
2月前
|
SQL 关系型数据库 MySQL
mysql语句结构
mysql语句结构
24 3
|
2月前
|
监控 关系型数据库 MySQL
MySQL技能完整学习列表12、性能优化——1、性能指标和监控——2、优化查询和数据库结构——3、硬件和配置优化
MySQL技能完整学习列表12、性能优化——1、性能指标和监控——2、优化查询和数据库结构——3、硬件和配置优化
146 0
|
2月前
|
SQL 关系型数据库 MySQL
MySQL日期函数的SQL代码示例和使用场景
MySQL日期函数的SQL代码示例和使用场景
24 0