使用程序方式获取与处理MySQL表数据

8.1  执行多条语句获取 MySQL 表数据

8.1.1  MySQL 中的常量

8.1.2  MySQL 中的变量

1.用户变量

用户可以在表达式中使用自己定义的变量,这样的变量称为用户变量。

用户变量在使用前必须定义和初始化,如果使用没有初始化的变量,其值为 Null

用户变量与当前连接有关,也就是说,一个客户端定义的变量不能被其他客户端使用。定义和初始化一个用户变量可以使用 Set 语句,其语法格式如下 :

Set @< 变量名称 1>=< 表达式 1> [ , @< 变量名称 2>=< 表达式 2> , … ] ;

定义和初始化用户变量的规则如下。

2.系统变量

MySQL 有一些特定的设置,当 MySQL 数据库服务器启动的时候,这些设置被读取来决定下一步骤,这些设置就是系统变量,系统变量在 MySQL 服务器启动时就被引入并初始化为默认值。

系统变量一般都以“@@”为前缀,例如 @@Version 返回 MySQL 的版本。但某些特定的系统变量可以省略“@@”符号,例如 Current_Date(系统日期)、Current_Time(系统时间)、Current_Timestamp(系统日期和时间)和 Current_User(当前用户名)。

系统变量可以分为全局系统变量和会话系统变量两种类型。

3.局部变量

局部变量是可以保存单个特定类型数据值的变量,其有效作用范围为存储过程和自定义函数的 Begin…End 语句块之内,在 Begin…End 语句块运行结束之后,局部变量就消失了,在其他语句块中不可以使用该局部变量,但 Begin…End 语句块内所有语句都可以使用。

MySQL 中局部变量必须先定义后使用。使用 Declare 语句声明局部变量,定义局部变量的语法格式如下 :

8.1.3  MySQL 中的运算符与表达式

1.运算符

2.表达式

3.运算符的优先级

当一个复杂的表达式有多个运算符时,运算符优先级决定执行运算的先后次序。执行的次序有时会影响所得到的运算结果。MySQL 运算符优先级如表 8-1 所示。

8.1.4  MySQL 中的控制语句

Begin…End 语句用于将多个 SQL 语句组合为一个语句块(语句块相当于一个单一语句),以达到一起执行的目的。

2If…Then…Else 语句

If…Then…Else 语句用于进行条件判断,可用于实现程序的选择结构。根据是否满足条件,将执行不同的语句,其语法格式如下 :

If 语句的执行过程为 :如果条件表达式的值为 True,则执行对应的语句块 ;如果所有的条件表达式的值为 False,并且有 Else 子句,则执行 Else 子句对应的语句块。

3Case 语句

Case 语句用于计算列表并返回多个可能结果表达式中的一个,可用于实现程序的多分支结构,虽然使用 If…Then…Else 语句也能够实现多分支结构,但是使用 Case 语句的程序可读性更强,一条 Case 语句经常可以充当一条 If…Then…Else 语句。

4While 循环语句

While 循环语句用于实现循环结构,是有条件控制的循环语句,当满足某种条件时执行循环体内的语句。

While 循环语句的执行过程说明如下:首先判断逻辑表达式的值是否为 True,为 True 时则执行“语句块”中的语句,然后再次进行判断,为 True 则继续循环,为 False 则结束循环。

5Repeat 循环语句

Repeat 循环语句是有条件控制的循环语句,当满足特定条件时,就会跳出循环语句。

Repeat 循环语句的执行过程说明如下:首先执行语句块中的语句,然后判断逻辑表达式的值是否为 True,为 True 则停止循环,为 False 则继续循环。Repeat 语句也可以被标注。

8.1.5  MySQL 中的注释符

MySQL 注释符有以下 3 种。

任务 8-1】在命令行窗口中定义用户变量并执行多条 SQL 语句

任务描述

在命令行窗口中编辑与执行多条 SQL 语句,实现以下功能。

1)为用户变量 name 赋值“人民邮电出版社”。

2)从数据表“出版社”中查询“人民邮电出版社”的“出版社 ID”字段的值,并且将该值存储在用户变量 id 中。

3)从数据表“图书信息”中查询“人民邮电出版社”的图书种类数量,并且将其存储在用户变量 num 中。

4)显示用户变量 nameid num 的值。

任务实施

在命令提示符后输入以下语句 :

Use MallDB ;

Set @name=" 人民邮电出版社 " ; -- 给变量 name 赋值

Set @id=( Select 出版社 ID From 出版社信息

   Where 出版社名称 = " 人民邮电出版社 " ) ; -- 给变量 id 赋值

Set @num=( Select Count(*) From 图书信息 Where 出版社 =@id ) ;

Select @name , @id , @num ;

8.2  使用存储过程和游标获取与处理 MySQL 表数据

8.2.1  MySQL 的存储过程

MySQL 中使用存储过程主要有以下优点。

2Delimiter 命令

Delimiter 命令用于更改 MySQL 语句的结束符,例如将默认结束符“;”更改为“$$”,避免与 SQL 语句的默认结束符冲突。其语法格式如下 :

Delimiter < 自定义的结束符 >

3.创建存储过程

创建存储过程的语法格式如下 :

Create Procedure < 存储过程名 >( [ < 参数列表 > ] )

        [ < 存储过程的特征设置 > ]

        < 存储过程体 >

4.查看存储过程

查看存储过程状态的语法格式如下 :

Show Procedure Status [ Like < 存储过程名的模式字符 > ] ;

5.调用存储过程

存储过程创建完成后,可以在程序、触发器或者其他存储过程中被调用,其语法格式如下:

Call < 存储过程名 >( [ < 参数列表 > ] ) ;

6.修改存储过程

可以使用 Alter Procedure 语句修改存储过程的某些特征,其语法格式如下 :

7.删除存储过程

在命令行窗口中删除存储过程的语法格式如下 :

Drop Procedure [ if exists ] < 存储过程名 > ;

8.2.2  MySQL 的游标

任务 8-2】在命令行中创建存储过程查看指定出版社出版的图书种类

任务描述

在命令行窗口中创建存储过程 proc0501,其功能是从“图书信息”数据表中查看人民邮电出版社出版的图书种类。

任务实施

在命令行窗口中创建存储过程 proc0501

成功登录 MySQL 服务器后,在命令行提示符后输入以下语句 :

Delimiter $$

Use MallDB ;

Create Procedure proc0501()

Begin

        Declare name varchar(16) ;

        Declare id int ;

        Declare num int ;

        Set name=" 人民邮电出版社 " ; -- 给变量 name 赋值

        Set id=(Select 出版社 ID From 出版社信息 Where 出版社名称 = name) ;

        Select Count(*) Into num From 图书信息 Where 出版社 =id ;

        Select name , id , num ;

End $$

Delimiter ;

任务 8-3】Navicat for MySQL 中创建有输入参数的存储过程

任务描述

 Navicat for MySQL 中创建包含输入参数的存储过程 proc0503,其功能是根据输入参数 strName 的值(存储“出版社名称”)从“图书信息”数据表中查看对应出版社出版的图书种类。

任务实施

查看数据库 MallDB 中已有的存储过程

启动 Navicat for MySQL,在窗口左侧双击打开连接 MallConn,再双击打开数据库MallDB,然后在工具栏中单击函数按钮,此时可以看到数据库 MallDB 中已有的存储过程,如图 8-8 所示。

在存储过程的定义窗口中输入如下所示的 SQL 语句 :

Begin

       Declare id int ;

       Declare num int ;

       If (strName Is Not Null) Then

             Set id=(Select 出版社 ID From 出版社信息 Where 出版社名称=strName) ;

             Select Count(*) Into num From 图书信息 Where 出版社 =id ;

       End If ;

       Select strName , id , num ;

End

SQL 语句编辑完成后,单击工具栏中的保存按钮,对存储过程“proc0503”进行保存,存储过程保存完成后,完整的存储过程定义如图 8-13 所示。

8-13  完整的存储过程定义

8.3  使用函数获取与处理 MySQL 表数据

8.3.1  MySQL 的内置函数

MySQL 包含了 100 多个内置函数,从数学函数到比较函数等,系统定义的内置函数如表 8-2 所示。

8.3.2  MySQL 的自定义函数

1.自定义函数概述

MySQL 的自定义函数与存储过程相似,都是由 SQL 语句和过程式语句组成的代码片段,并且可以被应用程序调用。

2.自定义函数的定义

创建自定义函数的语法格式如下所示 :

Create Function < 函数名称 >( [< 输入参数名 > < 参数类型 > [ , … ] )

           Returns < 函数返回值类型 >

           [ < 函数的特征设置 > ]

           < 函数体 >

3.查看自定义函数

Show Function Status [ Like < 函数名的模式字符 > ] ;

4.修改自定义函数

修改函数是指修改已定义好的自定义函数,其语法格式如下 :

Alter Function < 自定义函数名称 > [ < 函数的特征设置 > ] ;

5.删除自定义函数

删除自定义函数的语法格式如下 :

Drop Function [ if exists ] < 自定义函数名称 > ;

任务 8-4】在命令行窗口中创建自定义函数 getTypeName()

任务描述

在命令行窗口中创建一个自定义函数 getTypeName(),该函数的功能是从“商品类型”数据表中根据指定的“类型编号”获取“类型名称”。

任务实施

在命令行窗口中创建自定义函数 getTypeName()

在命令提示符后输入以下语句 :

Delimiter $$

Create Function getTypeName( strTypeNumber varchar(9) )

          Returns Varchar(10)

Deterministic Begin

      Declare strTypeName varchar(10) ;

      If ( strTypeNumber Is Not Null) Then

         Select 类型名称 Into strTypeName From 商品类型

                    Where 类型编号 = strTypeNumber ;

      End If ;

      Return strTypeName ;

End $$

Delimiter ;

8.4  使用触发器获取与处理 MySQL 表数据

1.触发器概述

触发器是一种特殊的存储过程,它与数据表紧密相连,可以看作数据表定义的一部分,用于对数据表实施完整性约束

存储过程可以使用 Call 命令调用,触发器的调用和存储过程不一样,触发器只能由数据库的特定事件来触发,并且不能接收参数。当满足触发器的触发条件时,数据库系统就会执行触发器中定义的程序语句。

2.创建触发器

MySQL 中创建触发器的语法格式如下:

Create Trigger < 触发器名称 > Before | After < 触发事件 >

          On < 数据表名称 >

          For Each Row

      < 执行语句 > ;

3.查看触发器

查看触发器是指查看数据库中已存在的触发器的定义、状态和语法信息等,可以使用SQL 语句来查看已经创建的触发器。

Select * From Information_Schema.Triggers Where Trigger_Name=< 触发器名 > ;

4.删除触发器

删除触发器的语法格式如下 :

Drop Trigger [ < 数据库名 >.]< 触发器名 >

任务 8-5】创建 Insert 触发器

任务描述

创建一个名为“order_insert的触发器,当向“订单信息”数据表插入一条订单记录时,将用户变量 strInfo 的值设置为“在订单信息表中成功插入一条记录”。

任务实施

在命令行窗口中创建触发器 order_insert

在命令提示符后输入以下语句 :

Delimiter $$

Create Trigger order_insert After Insert On 订单信息 For Each Row

Begin

       Set @strInfo= " 在订单信息表中成功插入一条记录 " ;

End $$

Delimiter ;

Triggers 数据表中查看触发器信息

在命令提示符后输入以下 Select 语句查看触发器信息 :

Select Trigger_Name,Event_Manipulation,Event_Object_Schema , Event_Object_Table

         From Information_Schema.Triggers Where Trigger_Name="order_insert" ;

使用 Select 语句查看触发器信息的结果如图 8-19 所示。

应用触发器 order_insert

在命令提示符后直接输入以下语句查看用户变量 strInfo 的值,此时该变量的初始值为“0x”

Select @strInfo ;

接下来,向“订单信息”数据表中插入一条记录,测试触发器 order_insert 是否会被触发。对应的语句如下 :

Insert Into 订单信息 ( 订单编号 , 提交订单时间 , 订单完成时间 , 送货方式 , 客户 ,

                  收货人 , 付款方式 , 商品总额 , 运费 , 优惠金额 , 应付总额 , 订单状态 )

 Values("132577616584", "2020-10-25 11:13:08", "2020-10-28 15:31:12", " 京东快递 ", 2, " 陈芳 ", " 货到付款 ", 268.80, 0.00, 10.00, 258.80, " 已完成 ") ;

任务 8-6】创建 Delete 触发器

任务描述

创建一个名为“commodityType_delete的触发器,该触发器用于实现以下功能 :限制用户删除“商品类型”数据表中的记录,当用户删除记录时抛出禁止删除记录的错误提示信息。

任务实施

在命令行窗口中创建触发器 commodityType_delete

在命令提示符后输入以下语句 :

Delimiter $$

Create Trigger commodityType_delete Before Delete

             On 商品类型 For Each Row

Begin

    Set @strDeleteInfo=" 商品类型数据表中的记录不允许删除 " ;

    Delete From 商品类型 ;

End $$

Delimiter ;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外包干了三年,快要废了。。。

先简单说一下自己的情况&#xff0c;普通本科&#xff0c;在外包干了3年多的功能测试&#xff0c;这几年因为大环境不好&#xff0c;我整个人心惊胆战的&#xff0c;怕自己卷铺盖走人了&#xff0c;我感觉自己不能够在这样蹉跎下去了&#xff0c;长时间呆在一个舒适的环境真的会…

算法刷题:300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

300. 最长递增子序列 1.dp定义&#xff1a;dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度 2.递推公式&#xff1a;if (nums[i] > nums[j]) dp[i] max(dp[i], dp[j] 1); 注意这里不是要dp[i] 与 dp[j] 1进行比较&#xff0c;而是我们要取dp[j] 1的最大值…

JAVA 的excel数据批量导入解析 现在都用什么API工具 Apache POI 、EasyExcel 、easypoi有什么区别

&#x1f4dd;个人主页&#x1f339;&#xff1a;个人主页 ⏩收录专栏⏪&#xff1a;SpringBoot &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339;&#xff0c;让我们共同进步&#xff01; 在Java中&#xff0c;处理Excel数据批量导入解析时&#xff0c;常…

高空抛物检测算法的应用场景解析

高空抛物事件频发&#xff0c;对公众安全构成严重威胁。无论是居民区还是商业中心&#xff0c;从高层建筑中丢弃物品都可能导致人员伤亡和财产损失。传统的监控手段多以事后追溯为主&#xff0c;无法在事发时及时预警和干预。为应对这一难题&#xff0c;视觉分析技术的发展为高…

全国历年高考真题2008-2024

目录 分享链接&#xff1a; ⬇️⬇️⬇️ 点击下载

单元测试之mock使用

一、简介 一般程序中A类的m1方法调用B类的m2方法&#xff0c;而B类的m2方法又调用了C类的m3方法以此类推等等&#xff0c;而其中的某个方法的一些数据又需要调用其它服务或者查询数据库&#xff0c;一般单元测试只针对某个功能进行测试&#xff0c;但是如上面的情况在做单元测试…

Day9 | Java框架 | SpringBoot

Day9 | Java框架 | SpringBoot SpringBoot简介入门程序概述起步依赖 基础配置配置文件格式&#xff1a;3种yaml语法规则yaml数据读取三种格式 多环境启动配置文件参数命令行参数多环境开发控制&#xff1a;Maven & SpringBoot 多环境兼容 配置文件分类&#xff1a;4种 整合…

蓝桥杯4. Fizz Buzz 经典问题

题目描述 给定一个整数 NN&#xff0c;从 1 到 NN 按照下面的规则返回每个数&#xff1a; 如果这个数被 3 整除&#xff0c;返回 Fizz。如果这个数被 5 整除&#xff0c;返回 Buzz如果这个数能同时被 3 和 5 整除&#xff0c;返回 FizzBuzz。如果这个数既不能被 3 也不能被 5…

本地部署Llama 3.1大模型

Meta推出的Llama 3.1系列包括80亿、700亿、4050亿参数版本&#xff0c;上下文长度扩展至12.8万tokens&#xff0c;并增加了对八种语言的支持。 部署模型需要用到Ollama的一个工具&#xff0c;访问官方网站https://ollama.com 点击下载&#xff0c;选择下载你对应的操作系统下…

【无标题】Efinity 0基础进行流水灯项目撰写(FPGA)

文章目录 前言一、定义概念 缩写1. 二、性质1.2. 三、使用步骤编译常见错误1. 没加分号2. end 写多了 编译成功的标志总结参考文献 前言 数电课设 使用 FPGAIDE 使用 Efinity 一、定义概念 缩写 1. 二、性质 1. 2. 三、使用步骤 python代码块matlab代码块c代码块编译…

手把手带你拿捏C指针(2)(含冒泡排序)

文章目录 一、数组名的理解二、使用指针访问数组三、一维数组传参本质四、冒泡排序五、二级指针六、指针数组七、指针数组模拟二维数组 一、数组名的理解 在上⼀个章节我们在使⽤指针访问数组的内容时&#xff0c;有这样的代码&#xff1a; int arr[10] {1,2,3,4,5,6,7,8,9,…

工信部【信创认证】全面解读,包含信创集成项目管理师,信创规划管理师等

行业背景 国资委发布79号文件&#xff1a;详细规划了中央企业和国有企业信创国产化的实施路径和时间表&#xff0c;明确提出了到2027年100%完成信创“替代”的宏伟目标。这一政策不仅涵盖了芯片、基础软件、操作系统、中间件等重要领域&#xff0c;更意味着从2023年起&#xf…

5天涨粉3W!26个视频12.2W粉!AI做这种视频这么火嘛?

前几天刷到一个AI视频的账号&#xff0c;当时刷到时候才9W粉丝&#xff0c;今天又刷到他&#xff0c;已经12.2W了&#xff01;这涨粉速度&#xff0c;简直了&#xff01;&#xff01; 26个视频&#xff0c;12.2万粉丝 在这个看脸的时代&#xff0c;内容创作者们为了吸引眼球&a…

3.js - 着色器设置点材质(螺旋星系特效)

上图 着色器设置点材质时&#xff0c;在顶点着色器中&#xff0c;最好设置gl_PointSize&#xff0c;不然看不到你在页面中添加的点 main.js import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControlsimport gsap from gsapimp…

【截图服务 +打包】pkg打包 puppeteer

目录 最后结论 windows打包成服务 定制executablePath 用程序来查找chrome.exe 代替上面的写配置文件 服务遇到的问题 使用java开一个线程启动 遇到的问题与解决 版本匹配问题 打出包后的运行报错问题 linux下的安装 安装n 库缺少 程序运行后的报错 制作 运行报…

化工机械如何精准地进行网络营销推广?

合作咨询联系竑图 hongtu201988 化工机械行业该如何做网络推广&#xff0c;让销量和利润都有明显的提升呢&#xff1f;湖南竑图网络来为大家分析分析&#xff1a; 一、产品的用户是谁&#xff1f; 在传统行业中&#xff0c;用户群体的多样性不容忽视。比如机械设备有很多种&am…

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果&#xff1a; 解密后的数据就是正常数据&#xff1a; 后端&#xff1a;使用的是spring-cloud框架&#xff0c;在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30…

Kamailio-超强dispatcher负载均衡模块

Kamailio 负载均衡的功能主要依靠 Dispatcher 模块完成&#xff0c;模块官方文档参看 为什么要引入负载均衡&#xff1f;如何使用&#xff1f; 引入和配置功能路由调用命令行指令 为什么要引入负载均衡&#xff1f; Q: 如果单台VOIP服务的性能不能满足业务需求了&#xff0…

C++中的I/O流

本节主要看代码理解 I/O流继承关系 iostream 主要类 cin cout cerr clog while&#xff08;cin>>str&#xff09; &#xff5b; //处理 &#xff5d; 当接收ctrl z 或 ctrl c时&#xff0c;会停止&#xff0c; 原理&#xff1a;重载操作符bool&#xff0c;令指定istr…

Meta:大语言模型可以通过自我批判取得大幅提升!

夕小瑶科技说 原创 作者 | 谢年年 论文的审稿模式想必大家都不会陌生&#xff0c;一篇论文除了分配多个评审&#xff0c;最后还将由PC综合评估各位审稿人的reviews撰写meta-review。 最近&#xff0c;来自Meta的研究团队将这一模式引进到大模型的对齐训练中。模型同时扮演 执…