wordpress前端可视化编辑,优化师证书,百度怎么注册自己的网站,四平市城市建设档案馆网站8.1 执行多条语句获取 MySQL 表数据
8.1.1 MySQL 中的常量 8.1.2 MySQL 中的变量
1#xff0e;用户变量
用户可以在表达式中使用自己定义的变量#xff0c;这样的变量称为用户变量。
用户变量在使用前必须定义和初始化#xff0c;如果使用没有初始化的变量#x…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显示用户变量 name、id 和 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_Nameorder_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 ;