MySQL学习---14、变量、定义条件和处理程序

news2024/11/30 2:29:58

1、变量

在MySQL数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果数据。
在MySQL数据库中,变量分为:
	1、系统变量
	2、用户自定义变量

1、系统变量

1.1.1 系统变量分类

1、变量由系统定义,不是用户定义,属于服务器层面。启动MySQL服务,生成MySQL服务实例期间,MySQL将为MySQL服务器内存中的系统变量赋值,这些系统变量定义了当前MySQL服务实例的属性、特征。这些系统变量的值要么是编译MySQL时参数的默认值,要么是配置文件(my.ini等)中的参数值。

2、系统变量分为全局系统变量(需要添加global关键字)以及会话系统变量(需要添加session关键字),有时也把全局系统变量简称为全局变量,有时也把会话系统变量称为local变量。如果不写,默认是会话级别。静态变量(在MySQL服务实例运行期间他们的值不能使用set动态修改)属于特殊的全局系统变量。

3、每一个MySQL客户机成功连接MySQL服务器后,都会产生与之对应的会话。会话期间,MySQL服务实例会在MySQL服务器内存中生成与该会话对应的会话系统变量,这些会话系统变量的初始值是全局系统变量值的复制。
在这里插入图片描述
注意:
1、会话系统变量针对于所有会话连接有效,但不能跨重启。
2、会话1对某个全局系统变量值的修改会导致会话2中同一个全局系统变量值的修改。

4、在MySQL中有些系统变量只能是全局的,例如max_connections用于限制服务器的最大连接数;有些系统变量作用区域既可以是全局又可以是会话,例如character_set_client用于设置客户端的字符集;有些系统变量的作用域只能是当前会话,例如pseudo_thread_id用于标记当前会话的MySQL连接ID。

1.1.2 查看系统变量
1、查看所有或部分系统变量
#查看所有全局变量
show global variables;

在这里插入图片描述

#查看所有会话变量
show session variables;
#或
show variables;

在这里插入图片描述

#查看满足条件的部分系统变量
show global variables like '%标识符%'

在这里插入图片描述
2、查看指定系统变量
作为MySQL编码规范,MySQL中的系统变量以两个“@”开头,其中“@@global”仅用于标记全局系统变量,“@@session”仅用于标记会话系统变量。“@@”首选标记会话系统变量,如果会话系统变量不存在。则标记为全局系统变量。

#查看指定的系统变量值
select @@global.变量名

在这里插入图片描述

#查看指定的会话变量的值
select @@session.变量名
#或
select @@变量名

在这里插入图片描述

3、修改系统变量的值
有些时候,数据库管理员需要修改系统变量的默认值,以便修改当前会话或MySQL服务实例的属性、特征。
(1)修改MySQL配置文件,继而修改MySQL系统变了的值(该方法需要重启MySQL服务)
(2)在MySQL服务运行期间,使用“set”命令重新设置系统变量的值。

#改变系统变量
set @@global.变量名=变量值;
set global 变量名=变量值;

在这里插入图片描述

#改变会话变量
set @@session.变量名=变量值;
set session 变量名=变量值;

1.2 用户变量

1.2.1 用户变量分类
用户变量是用户自己定义的,作为MySQL编码规范,MySQL中的用户变量以一个“@”开头。根据作用的范围不同,又分为会话用户变量和局变量。
(1)会话用户变量:作用域和会话变量一样,只对当前连接有效。
(2)局部变量:只在Begin和End语句块有效。局部变量只能在存储过程和函数中使用。
1.2.2 会话用户变量
1、变量的定义
#方式1:"="或":="
set @用户变量=;
set @用户变量:=;

#方式2:":="或 INTO关键字
select @用户变量:=表达式[from 等子句];
select 表达式 into @用户变量 [from 等子句];
2、查看用户变量的值(查看、比较、运算等)
select @用户变量

在这里插入图片描述
在这里插入图片描述

1.2.3 局部变量
定义:可以使用Declare语句定义一个局部变量
作用域:仅仅在定义它的Begin...End中有效
位置:只能放在Begin...End中,而且只能放在第一句。
Begin
	#1、声明局部变量
	Declare 变量名1 变量1数据类型 [Default 变量默认值];
	Declare 变量名2,变量名3,...变量数据类型[Default 变量默认值]
	
	#2、为局部变量赋值
	set 变量名1=;
	selectinto 变量名2 [from 子句];

	#3、查看局部变量的值
	select  变量名1,变量名2...;
End

举例:
在这里插入图片描述
注意:局部变量只能在存储过程和函数中才有用!!!

1.2.4 对比会话用户变量与局部变量
作用域定义位置语法
会话用户变量当前会话会话的任何地方加@符号,不用指定类型
局部变量定义它的Begin…End中Begin…End的第一句话一般不用加@,需要指定类型

2、定义条件与处理程序

定义条件是事先定义程序执行过程中可能遇到的问题,处理程序定义了在遇到问题时应该采取的处理方式,并且保证存储过程和函数在遇到警告或错误时能继续执行。这样可以增强存储程序处理问题的能力,避免程序异常停止运行。

说明: 定义条件和处理程序在存储过程、存储函数都是支持的。

2.1 定义条件

定义条件就是给MySQL中的错误码取名,这有助于存储的程序代码更加清晰。它将一个错误名字和指定的错误条件关联起来。这个名字可以随后被用子啊定义处理程序的Declare Handler语句中。

语法格式:

Declare 错误名称 Condition for 错误码(错误条件)

错误码的说明:
1、MySQL_error_code 和sqlstate_value都可以表示MySQL的错误。
(1)MySQL_error_code是数值类型错误代码。
(2)sqlstate_value是长度为5的字符串类型错误代码。

2.2处理程序

可以为SQL执行过程中发生的某种类型的错误定义特殊的处理程序。

语法格式:

Declare 处理方式 Handler for 错误类型 处理语句

1、处理方式:Continue、Exit、Undo。
(1)Continue:表示遇到错误不处理,继续执行
(2)Exit:表示遇到错误马上退出。
(3)Undo:表示遇到错误后撤回之前的操作。MySQL中暂时不支持这样的操作。
2、错误类型:
(1)SqlState ‘字符串错误码’:表示长度为5的sqlstate_value类型的错误代码。
(2)MySQL_error_code:匹配数值类型错误代码
(3)错误名称:表示Declare…Condition定义的错误条件名称。
(4)SqlWarning:匹配所有以01开头的SqlState错误代码。
(5)NOT FOUND :匹配所有以02开头的SQLSTATE错误代码;
(6)NOT FOUND :匹配所有以02开头的SQLSTATE错误代码;
3、处理语句:如果出现上述条件之一,则采用对应的处理方式,并执行指定的处理语句。语句可以是
像“ SET 变量 = 值 ”这样的简单语句,也可以是使用 BEGIN … END 编写的复合语句。

2.3 案例实操

1、案例分析:
创建一个名称为“UpdateDataNoCondition”的存储过程。代码如下:

DELIMITER //
CREATE PROCEDURE UpdateDataNoCondition()
BEGIN
SET @x = 1;
UPDATE employees SET email = NULL WHERE last_name = 'Abel';
SET @x = 2;
UPDATE employees SET email = 'aabbel' WHERE last_name = 'Abel';
SET @x = 3;
END //
DELIMITER ;

调用存储过程
在这里插入图片描述
具体分析:可以看出存储过程没有全部执行完,可以分析出是,UPDATE employees SET email = NULL WHERE last_name = ‘Abel’,这个语句出现了错误,由于MySQL中,在存储过程中未定义条件和处理程序,且当存储过程中执行的SQL语句保错的时候,数据库会抛出七层,然后退出当前SQL逻辑,不再向下执行。

2、案例解决:
在这里插入图片描述

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

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

相关文章

SpringCloud使用SkyWalking实现分布式链路追踪2以及Prometheus全方位监控告警系统

文章目录 一、SkyWalking链路追踪使用Elasticsearch数据库1、SkyWalking连接Elasticsearch数据库2、SkyWalking自定义链路追踪3、SkyWalking的调用日志 二、SkyWalking链路追踪的告警功能1、SkyWalking的告警规则2、SkyWalking自定义告警规则3、SkyWalking实现网络钩子Webhooks…

基于springboot+vue的校园任务订单配送管理系统

随着我国教育制度的改革的发展,各大高校的学生数量也在不断的增加。当前大学生的生活和消费习惯等导致他们更喜欢通过网络来获取自己想要的商品和服务,这也是导致当前校园配送盛行的主要原因。为了能够让更多的学生享受到校园配送的服务,我们…

记录一次华三交换机配置IP地址和SNMP服务的过程

一、华三交换机配置IP地址 1、将交换机的console口连接到台式机,然后通过XShell连接到COM口 2、进入华三交换机的系统配置界面 命令:system-view 示例:system-view 3、创建vlan。输入vlan vlan-id命令创建一个VLAN。其中,vlan…

FreeRTOS_移植和配置

目录 1. 什么是FreeRTOS? 2. FreeRTOS 特点 3. FreeRTOS 移植 3.1 验证程序 1. 什么是FreeRTOS? 我们先看 FreeRTOS 的名字,可以分成两部分:Free 和 RTOS,Free 就是免费的、自由的、不受约束的意思,RTO…

016-fty_crkme3

运行程序 check错误 查壳 有UPX壳,ESP定律脱壳 载入OD分析 搜索字符串 向上找,找到段首 开始分析算法 搜先判断输入是否为空 再下面开始判断输入的字符除了 “-” 是不是满足0-9 如果满足的话,要再判断长度,0x9 到 0xB&#x…

【计算机组成原理】第一章 计算系统概论

系列文章目录 第一章 计算系统概论 第二章 运算方法和运算器 第三章 多层次的存储器 第四章 指令系统 第五章 中央处理器 第六章 总线系统 第七章 外围设备 文章目录 系列文章目录前言第一章 计算机系统概论1.1 计算机的分类1.2 计算机发展简史1.2.1 计算机的五代变化1.2.2 半…

19 KVM管理虚拟机-虚拟机生命周期管理命令

文章目录 19 KVM管理虚拟机-虚拟机生命周期管理命令19.1 概述19.2 前提条件19.3 命令使用说明 19 KVM管理虚拟机-虚拟机生命周期管理命令 19.1 概述 用户可以使用virsh命令工具管理虚拟机生命周期。本节介绍生命周期相关的命令以指导用户使用。 19.2 前提条件 执行虚拟机生…

uboot symbol value ‘‘ invalid for SYS_TEXT_BASE 解决方法

环境 Win10 64位 ubuntu 20.04 虚拟机 VMware Workstation 16 Pro gcc 交叉编译工具链: ARM 官方 gcc version 11.2.1 20220111 NUC980 uboot 版本 :尝试移植到 u-boot-2019.10,官方当前 u-boot 版本为 2016.11 问题描述 升级 u-boot …

ThinkPHP6 模板引擎普通标签中,模板引擎运算符函数,循环标签,判断标签的使用,及一些特殊标签

ThinkPHP6 模板引擎普通标签中,模板引擎运算符函数,循环标签,判断标签的使用,及一些特殊标签 模板引擎支持普通标签和XML标签方式两种标签定义,分别用于不同的目的: 标签类型描述普通标签主要用于输出变量…

Linux 安装 JDK、MySQL、Tomcat(图文并茂)

所需资料 下载 1.1 软件安装方式 在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下: 安装方式特点二进制发布包安装软件已经针对具体平台编译打包发布,只要解压,修改配置即可rpm安装软件已经按照re…

Unity里URP项目的介绍和创建

大家好,我是阿赵,接下来会介绍一下URP的使用 一、URP的介绍 URP(Universal Render Pipeline)通用渲染管线,是Unity在2019.3版本之后推出的一种新的渲染管线。 对比起默认的渲染管线,他的使用上会产生了一些变化,包括…

RS485电路及程序设计

一、电路原理图 图中 A、B 总线接口,用于连接 485 总线。RO 是接收输出端,DI 是发送数据收入端,RE是接收使能信号(低电平有效),DE 是发送使能信号(高电平有效)。RE DE接在一起就是高…

jenkins安装配置--持续集成

目录 1.什么是持续集成 1.1持续集成 Continuous integration ,简称CI 1.2持续集成具有的特点: 1.3持续集成的作用 2.jenkins简介 2.1概述 2.2特点 3.jenkins安装 1.下载Jenkins 2.下载jdk 3.网盘安装包载 4.创建软件安装目录 5.上传jdk和Jen…

C-内存管理

内存管理 堆,栈,静态区 c程序地址空间分布规则: 栈是从高地址向低地址延伸的,后创建的变量,后入栈,那么地址就越小. 静态变量,作用域不变,声明周期发生改变.本质原因是存储位置发生改变.编译器编译的时候放到了全局数据区. #include<stdio.h> #include<stdlib.h>…

虾皮Shopee商品详情接口(item_get-根据ID取商品详情)代码封装

item_get-根据ID取商品详情接口 通过代码封装该接口可以拿到商品标题&#xff0c;商品价格&#xff0c;商品促销信息&#xff0c;商品优惠价&#xff0c;商品库存&#xff0c;sku属性&#xff0c;商品图片&#xff0c;desc图片&#xff0c;desc描述&#xff0c;sku图片&#xf…

基于阿里云服务器安装宝塔Linux面板详细流程(有图)

使用阿里云服务器安装宝塔面板教程&#xff0c;阿里云百科以ECS云服务器CentOS操作系统为例&#xff0c;安装宝塔Linux面板&#xff0c;先远程连接到云服务器&#xff0c;然后执行宝塔面板安装命令&#xff0c;系统会自动安装宝塔面板&#xff0c;安装完成后会返回面板地址、账…

JS数据分组

JS对数据进行分组_js数据分组_柳宁依的博客-CSDN博客 原理没看懂&#xff0c;增加分组显示数据部分。 <html> <head> <style> select { display: block; margin: auto; } table { border-collapse: collapse; margin: auto; } th, td { border: 1px solid b…

“裸奔”时代下,我们该如何有效应对网络攻击、数据泄露和隐私侵犯

随着互联网的普及&#xff0c;越来越多的个人信息被上传到互联网上&#xff0c;而网络攻击、数据泄露和隐私侵犯等问题也日益严重。在这个“裸奔”时代&#xff0c;如何保护我们的网络隐私成为了一项紧迫的任务。本文将介绍一些实用的技巧和工具&#xff0c;帮助我们有效应对网…

不强制存储的ListModel和ComboBoxModel

主方法代码&#xff1a; package com.aynu.layout;import com.aynu.model.NumberComboBoxListModel; import com.aynu.model.NumberListModel;import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import j…

从零开始 Spring Boot 28:资源

从零开始 Spring Boot 28&#xff1a;资源 图源&#xff1a;简书 (jianshu.com) Resource 接口 Spring中的资源被抽象为一个Resource接口&#xff1a; public interface Resource extends InputStreamSource {boolean exists();boolean isReadable();boolean isOpen();boole…