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

news2024/11/15 5:28:40

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.coloradmin.cn/o/2110136.html

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

相关文章

EG边缘计算网关连接华为云物联网平台(MQTT协议)

需求概述 实现一个流程&#xff1a;EG8200mini采集Modbus RTU数据&#xff0c;通过MQTT协议连接华为云物联网平台 Modbus RTU采集此处不做过多赘述&#xff0c;可参考其他案例&#xff08;串口读取Modbus传感器数据&#xff09;介绍。下文默认已经采集到Modbus RTU数据。 要…

【B题成品论文已出】24数学建模国赛B题成品论文(附参考代码)免费分享

B题&#xff1a;生产过程中的决策问题 一、第一问 针对问题一&#xff0c;要求我们制定多种抽样方案&#xff0c;并利用区间估计的方法确定各个抽样方案的检测次数&#xff0c;在两种情形下确定抽样方法。这里可以选择的抽样方案有简单随机抽样&#xff08;超几何分布中未知参…

详解 MQ 消息队列

谈起消息队列&#xff0c;内心还是会有些波澜。 消息队列&#xff0c;缓存&#xff0c;分库分表是高并发解决方案三剑客&#xff0c;而消息队列是我最喜欢&#xff0c;也是思考最多的技术。 我想按照下面的四个阶段分享我与消息队列的故事&#xff0c;同时也是对我技术成长经…

ICAS英格尔认证碳中和技术项目入选联合国工发组织第三届碳中和技术方案征集,打造农食系统碳足迹管理“智囊”

2024年8月27日&#xff0c;由联合国工业发展组织上海ITPO与上海交大-联合国工发绿色增长联合研究院联合主办的“虹口双碳对话第三届碳中和技术方案征集暨UNIDO Global Call 2024中国项目储备评估会”在上海环境能源交易所成功举办。 中国科学院地理科学与资源研究所陆地表层格…

【银河麒麟高级服务器操作系统实例】虚拟化平台系统服务中断现象分析及处理建议

服务器环境以及配置 【机型】虚机 处理器&#xff1a; Kunpeng-920 内存&#xff1a; 40G 【内核版本】 4.19.90-23.8.v2101.ky10.aarch64 【OS镜像版本】 银河麒麟操作系统 Kylin-Server-10-SP1-Release-Build20-20210518-arm64 【第三方软件】 智能运维系统、mysq…

Flume 日志采集系统

Flume 日志采集系统 一、Flume 概述二、Flume 架构设计2.1 架构图2.2 Flume Source 类型2.3 Flume Channel 类型2.4 Flume Sink 类型 三、Flume 安装部署3.1 下载解压3.2 上传解压3.3 修改配置文件2.4 启动 Flume Agent 四、案例实践&#xff1a;Flume 分布式集群搭建4.1 Flume…

使用 StatisticalOutlierRemoval 过滤器删除离群值

下载数据集 table_scene_lms400.pcd 并将其保存到磁盘的某个位置。 然后&#xff0c;创建一个文件&#xff0c;比如说&#xff0c;在你的收藏夹中 编辑器&#xff0c;并将以下内容放入其中&#xff1a;statistical_removal.cpp #include <iostream> #include <pcl/i…

安科瑞光伏三相电子式导轨电表ADL400N-CT双向计量防逆流自带互感器电表

概述 ADL系列导轨式多功能电能表&#xff0c;是主要针对于光伏并网系统、微逆系统、储能系统、交流耦合系统等新能源发电系统而设计的一款智能仪表&#xff0c;产品具有精度高、体积小、响应速度快、安装方便等优点。具有对电力参数进行采样计量和监测&#xff0c;逆变器或者能…

rancher搭建k8s及jenkins自动化部署

1、准备环境 角色IP用途k8s-rancher-master192.168.3.63master节点k8s-rancher-node01192.168.3.64node节点k8s-rancher-node02192.168.3.66node节点k8s-rancher-server192.168.2.33rancher-server节点注: 服务器名需要配置不同,相同服务器名不能加入node节点 在所有节点进行…

WebStorm用Debug模式调试Vue等前端项目

问题说明 开发前端时&#xff0c;一直很苦恼调试前端代码的麻烦。 简单的内容可以通过console.log()在控制台打印变量值&#xff0c;来验证预期结果。 涉及到稍复杂的逻辑&#xff0c;就需要在代码中侵入增加debugger&#xff0c;或者在浏览器中找到js文件&#xff0c;再手动添…

稀土废水回收硫酸铵树脂技术

稀土废水回收硫酸铵的过程主要涉及到化学沉淀法、离子交换法和蒸发结晶法等技术。这些方法可以有效地从稀土废水中回收硫酸铵&#xff0c;同时降低废水中的氨氮含量&#xff0c;实现资源的循环利用。以下是具体的技术介绍&#xff1a; 稀土废水回收硫酸铵的技术 ● 化学沉淀…

C++笔记18•数据结构:AVL树•

AVL树 简介&#xff1a; 当搜索二叉树退化为单支树时&#xff0c;搜索效率极低&#xff0c;为了使搜索效率高&#xff0c;建立平衡搜索二叉树就需要AVLTree这样的平衡树来解决。如果在一棵原本是平衡的AVL树中插入一个新节点&#xff0c;可能造成不平衡&#xff0c;此时必须调整…

领夹麦克风哪个好,领夹麦哪个牌子音质好,音质最好的麦克风推荐

在数字化内容创作的浪潮中&#xff0c;无线领夹麦克风以其便携高效的特点&#xff0c;成为了音频捕捉领域的热门选择。然而&#xff0c;每款产品都有其两面性&#xff0c;无线领夹麦克风在提供便利的同时&#xff0c;也潜藏着一些不容忽视的使用困扰。今天&#xff0c;我们就来…

【AI】张量的秩(阶)与矩阵的秩和阶的区别

在阅读MindSpore文档时&#xff0c;笔者对这段话不太理解&#xff0c;遂求助ChatGPT. 矩阵的秩是矩阵中线性无关的行或者列&#xff0c;矩阵的阶就是矩阵中的行数和列数。 而张量的秩和阶是一个概念&#xff0c;指的是张量的维度&#xff08;是1维的&#xff0c;二维的还是高维…

CRM软件的演进:从传统到连接型CRM

1、CRM定义与分类 1.1CRM的定义 CRM,英文Customer Relationship Management的缩写&#xff0c;中文全称为客户关系管理。通常情况下&#xff0c;人们通常用CRM直接表达客户关系管理软件系统——一个以客户为中心的专门用于管理与客户关系的软件工具&#xff0c;以确保与客户…

AI算力池化平台加速智能驾驶技术发展

1886年&#xff0c;世界上第一辆汽车诞生。在随后的一百多年时间里&#xff0c;汽车成为广泛用于社会经济生活多种领域的重要交通运输工具&#xff0c;极大地推动了人类社会经济的发展。进入新世纪&#xff0c;汽车的电动化、智能化日趋明显。 在汽车智能化方面&#xff0c;最…

YOLOv8改进 | 模块缝合 | C2f 融合RFAConv增强感受野空间特征 【完整代码 + 自研创新】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

龙胆草:恰似神秘星辰般的独特花语与奇幻传说

龙胆草&#xff0c;宛如大自然中一颗璀璨的神秘星辰。其不仅拥有着如诗般“恋上不快乐得你”的独特花语&#xff0c;背后更隐藏着中国和日本等充满奇幻色彩的传说故事。从曾童与蛇娘的传奇到日本兔子掘草根救人的奇闻&#xff0c;龙胆草承载着深厚的文化底蕴。快来一同探寻龙胆…

探索全光网技术 | 全光网产品解决方案整理-(宇洪科技)

探索全光网技术 |全光网产品解决方案整理-宇洪科技 目录 一、数据中心场景1、方案概述2、方案需求3、相关产品4、产品推荐5、方案价值 二、教育场景1、方案概述2、方案需求3、相关产品4、方案价值 三、医疗场景1、方案概述2、方案需求3、相关产品4、方案价值 注&#xff1a;本文…

LeetCode题练习与总结:天际线问题--218

一、题目描述 城市的 天际线 是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度&#xff0c;请返回 由这些建筑物形成的 天际线 。 每个建筑物的几何信息由数组 buildings 表示&#xff0c;其中三元组 buildings[i] [lefti, righti, heighti…