MySQL的变量、流程控制与游标

这篇具有很好参考价值的文章主要介绍了MySQL的变量、流程控制与游标。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.变量的分类

1.系统变量的分类

1.1.二者关系

2.查看系统变量

3.修改系统变量的值

4.用户变量

4.1会话用户变量

1.变量声明与赋值

2.变量使用   

4.2.局部变量

1.使用declare 声明  

2.局部变量声明格式   

3.局部变量赋值   

4.变量使用   

5.定义条件与处理程序

1.定义条件:

2.定义条件格式:

3.处理程序:

6.流程控制之分支结构

7.循环结构

8.跳转语句

9.游标

1.游标的作用

2.使用游标的步骤

3.游标的优缺点   


1.变量的分类

变量分为:系统变量、用户变量

1.系统变量的分类

        全局系统变量

        会话系统变量

1.1.二者关系

    •   全局系统变量针对于所有会话有效,但不能 跨重启

    •   会话系统变量针对当前会话有效,修改某个会话系统变量不会影响其他会话系统变量

    •   修改全局系统变量也会修改其他会话的全局系统变量值

    •   有些系统变量只能是全局系统变量,有些能当全局也能当会话系统变量,有些只能是会话系统变量

2.查看系统变量

    •   show global variables

    •   show session variables

    •   show variables - 默认查询会话系统变量

    •   select @@global.变量名/查看指定系统变量

    •   select @@session.变量名

    •   select @@变量名 先查看会话,没有就查看全局系统变量

#查看全局系统变量
SHOW GLOBAL VARIABLES;

#查看会话系统变量
SHOW SESSION VARIABLES;

#查询指定会话系统变量
SELECT @@global.max_connections;

#查询指定全局系统变量
SELECT @@global.character_set_client;

查询结果: 

 全局系统变量:

MySQL的变量、流程控制与游标,mysql,数据库

会话系统变量:

MySQL的变量、流程控制与游标,mysql,数据库

 

3.修改系统变量的值

    •   set @@global.变量名

    •   set global 全局变量名

SET @@global.max_connections = 161;
SET GLOBAL max_connections = 171;

    •   针对于当前的数据库实例有效,一旦重启mysql服务,就失效了

    •   set @@session.变量名

    •   set session 变量名

SET @@session.admin_port = 161;
SET SESSION admin_port = 171;

    •   针对于当前会话有效,一旦结束会话,重新建立起新的会话,就失效

4.用户变量

    •   分为会话用户变量(@修饰)、局部变量

    •   会话用户变量:使用@开头,只对当前连接会话有效

    •   局部变量:只在begin和end语句有效,只能在存储过程和函数使用

4.1会话用户变量

1.变量声明与赋值

            •   set @用户变量 := 值

            •   select @用户变量 := 语句 from

            •   select 语句 into @用户变量 from 表名

#设置会话用户变量
SET @m1 := 1;

SELECT @count := COUNT(*) FROM employees;

SELECT AVG(salary) INTO @salary FROM employees; 

2.变量使用   

            •   select @变量名

#变量的使用
SET @sum := @m1 + @count;

SELECT @sum;

4.2.局部变量

1.使用declare 声明  

    •   必须声明并使用在begin…end中

    •   必须使用在存储过程/函数中

    •   declare的方式声明的局部变量必须声明在begin中的首行的位置

    •   必须变量指明类型

2.局部变量声明格式   

    •   declare 变量名 类型

3.局部变量赋值   

    •   set 变量 := 值

    •   select 语句 into 变量 from 表名

4.变量使用   

    •   select 变量名

以上所有的代码示例:

DELIMITER $

CREATE PROCEDURE test()
BEGIN
	#局部变量声明
	DECLARE a INT DEFAULT 0;
	DECLARE emp_name VARCHAR(20);

	#局部变量赋值
	SET a := 1;
	SELECT last_name INTO emp_name FROM employees WHERE emp_id = 111;

	#局部变量使用
	SELECT a,emp_name;
END $

DELIMITER ;

#调用存储过程
CALL test();

5.定义条件与处理程序

1.定义条件:

        给mysql中的错误码命名,有助于存储的程序代码更清晰

        将一个错误名字和指定的错误条件关联起来 

2.定义条件格式:

        declare 错误名称 condition for 错误码 

错误码:举例:

                ERROR 1148(42000);

                1418-mysql_error_code;

                HY000-sqlstate_value

#定义 “ERROR 1148(42000)”错误,名称为command_not_allowed
#定义方式1:使用MySQL_error_code
DECLARE command_not_allowed CONDITION FOR 1148;

#定义方式2:使用sqlstate_value
DECLARE command_not_allowed CONDITION FOR SQLSTATE '42000';

3.处理程序:

        遇到问题时应当采取的处理方式,并且保证存储过程/函数在遇到错误时能够继续执行   

    •   declare 处理方式 handler for 错误类型 处理语句

    •   处理方式:continue、exit、undo(不支持)

#定义处理程序
#方式1:捕获sqlstate_value
DECLARE CONTINUE HANDLER FOR SQLSTATE '42000' SET @info = 'NO_SUCH_TABLE';

#方式2:捕获MySQL_error_code
DECLARE CONTINUE HANDLER FOR 1148 SET @info = 'NO_SUCH_TABLE';

#方式3
DECLARE EXIT HANDLER FOR SQLWARNING SET @info = 'ERROR';

6.流程控制之分支结构

   •   if使用

#IF的使用
DELIMITER $

CREATE PROCEDURE test()
BEGIN
	DECLARE var INT DEFAULT 20;
	
	IF var > 40
		THEN SELECT '中年';
	ELSEIF var > 18
		THEN SELECT '青年';
	ELSEIF var > 8
		THEN SELECT '少年';
	ELSE 
		SELECT '幼年';
	END IF;
END $

DELIMITER ;

   •   case使用

#CASE的使用
DELIMITER $

CREATE PROCEDURE test()
BEGIN
	DECLARE var INT DEFAULT 20;
	
	CASE var
		WHEN 40 THEN SELECT '中年';
		WHEN 20 THEN SELECT '青年';
		WHEN 10 THEN SELECT '少年';
		ELSE SELECT '幼年';
	END CASE;
END $

DELIMITER ;

7.循环结构

    •   循环结构四要素:初始化条件、循环条件、循环体、迭代条件

    •   loop

#loop的使用
DELIMITER $

CREATE PROCEDURE test()
BEGIN
	DECLARE var INT DEFAULT 20;
	loop_label:LOOP
		SET var = var + 1;
		IF var >= 10 THEN LEAVE loop_label;
		END IF;
	END LOOP loop_label;

END $

DELIMITER ;

   •   while

#while的使用
DELIMITER $

CREATE PROCEDURE test()
BEGIN
	DECLARE var INT DEFAULT 20;
	WHILE var <= 10 DO
		SET num = num + 1;
	END WHILE;

END $

DELIMITER ;

   •   repeat相当于-do…while…

#repeat的使用
DELIMITER $

CREATE PROCEDURE test()
BEGIN
	DECLARE var INT DEFAULT 20;
	REPEAT
		SET var = var + 1;
		UNTIL var >= 10
	END REPEAT;
END $

DELIMITER ;

8.跳转语句

    •   leave-相当于break

    •   iterate-相当于continue;只能在循环结构中使用

#跳转语句之leave
DELIMITER $

CREATE PROCEDURE leave_begin(IN num INT)
begin_label: BEGIN
IF num<=0
THEN LEAVE begin_label;
ELSEIF num=1
THEN SELECT AVG(salary) FROM employees;
ELSEIF num=2
THEN SELECT MIN(salary) FROM employees;
ELSE
SELECT MAX(salary) FROM employees;
END IF;
SELECT COUNT(*) FROM employees;
END $

DELIMITER ;

 

9.游标

1.游标的作用

    •   游标让SQL这种面向集合的语言有了面向过程开发的能力

    •   游标充当了指针的作用,是一种临时的数据库对象

2.使用游标的步骤

    1.  定义游标:declare…cursor for…;(在oracle中使用cursor is)

    2.  打开游标:open cursor_name

    3.  使用游标(从游标中取得数据):fetch into

    4.  关闭游标:close …

#游标的使用
DELIMITER //

CREATE PROCEDURE get_count_by_limit_total_salary(IN limit_total_salary DOUBLE,
OUT total_count INT)
BEGIN
	DECLARE emp_sal DOUBLE DEFAULT 0.0;
	DECLARE sum_sal DOUBLE DEFAULT 0.0;
	DECLARE count_re INT DEFAULT 0;
	
	
	#定义游标
	DECLARE emp_cursor CURSOR FOR SELECT salary FROM employees ORDER BY salary DESC;
	#打开游标
	OPEN emp_cursor;
	
	REPEAT
		#使用游标
		FETCH emp_cursor INTO emp_sal;
		SET sum_sal = sum_sal + emp_sal;
		SET count_re = count_re + 1;
		UNTIL sum_sal >= limit_total_salary
	END REPEAT;
	
	SET total_count = count_re;
	
	#关闭游标
	CLOSE emp_cursor;
END //

DELIMITER ;

为什么要关闭游标:

        因为游标会占用系统资源,不及时关闭,游标会一直保持到存储过程结束,影响系统运行的效率

3.游标的优缺点   

     •   优点:为逐条读取结果集中的数据提供了完美的解决方案。

    •   缺点:使用游标时会对数据行进行加锁,在业务并发量大时,会影响业务效率、消耗系统资源、造成内存不足;因为游标是在内存中进行的处理

    •   建议:用完游标及时关闭,提高效率文章来源地址https://www.toymoban.com/news/detail-612473.html

到了这里,关于MySQL的变量、流程控制与游标的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第十六章:变量、流程控制与游标

    ​ 在 MySQL 数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据,或输出最终的结果数据。变量分为 系统变量 和 用户自定义变量 。 系统变量 ​ 变量由系统定义,不是用户定义,输入服务器层面。启动 MySQL 服务,生成 MySQL 服务实例期间, MySQL 将为

    2024年02月08日
    浏览(54)
  • 第16章_变量、流程控制与游标

    讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 在MySQL数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果数据。 在 MySQL 数据库中,变量分为 系统变量 以及 用户自定义变量 。 1.1 系统变量 1.1.1 系统变量分

    2024年02月06日
    浏览(38)
  • MySQL数据库,JDBC连接数据库操作流程详细介绍

    在学完 MySQL 和 Java 后,我们通常会尝试使用 Java编译器 连接 MySQL数据库,从而达到使用编译器来操作数据库的效果。连接的这个过程会用 JDBC 相关知识,因此我把 JDBC 包的下载及导入流程,以及 JDBC 的使用流程整理下来分享给大家。 目录 1. 啥是JDBC? 2. JDBC依赖包 2.1 依赖包

    2024年02月06日
    浏览(104)
  • MySQL 8.0.35数据库的下载安装以及环境变量的配置

    记录数据库的下载安装方法,供初学者学习。 1.在mysql官网MySQL点击下载跳转页面。 2.选择社区版MySQL Community (GPL) Downloads »下载。 3.选择对应的版本,这里我选择的是windows的MySQL Installer for Windows。 4.跳转至以下页面后,蓝色箭头对应网页版本安装,红色箭头对于本地安装,我

    2024年02月05日
    浏览(67)
  • eclipse链接数据库,找数据库jar包,项目导入数据库jar包,数据库链接测试,MySQL环境变量配置。

    根据数据库版本找对应jar包 eclipse相应项目导入jar包 数据库链接测试 数据库8以上版本驱动改动 MySQL环境变量配置 1. 根据数据库版本下载jar包 查看系统数据库版本下载对于jar包 Win+r cmd msql -u用户名 -p密码(如果不行就是没有配MySQL环境变量最后有) 可以看出这是8.0.26版本 j

    2024年02月03日
    浏览(58)
  • 关于Android Studio连接mysql数据库的过程和注册功能的实现(数据的插入)以及mysql环境变量的配置

    1.安装mysql数据库,安装的教程哔站有很多,版本尽量用mysql5.7的版本,用mysql8.0的版本与android studio进行连接的话可能会出现问题。 2.安装完成之后,给本机配置环境变量,步骤:如下图示 (1)通过搜索打开环境变量。 (2).点击环境变量。 (3).找到系统变量点击新建。

    2024年04月14日
    浏览(66)
  • 一百九十五、MySQL——MySQL数据库创建只读权限的账号(附流程截图)

    在团队开发过程中,为了实现数据共享以及避免其他团队修改库表数据,需要提供数据库只读权限的账号,因此以MySQL数据库为例,创建MySQL数据库只读权限的账号 以用户名readyonly   密码hurys@123为例 mysql create user \\\'readyonly\\\'@\\\'%\\\' IDENTIFIED BY \\\'hurys@123\\\'; 注意:如果创建用户名时设置

    2024年02月08日
    浏览(54)
  • Mybatis连接MySQL数据库通过逆向工程简化开发流程

    在开发中,一般我们的开发流程是: 数据库:设计数据表 实体类:建立与数据表对应的pojo实体类 持久层:设计持久层,Mapper接口和Mypper.xml sql映射文件 服务层:添加Service接口和ServiceImpl接口实现类 逻辑控制层:设计各页面/功能的Cotroller 但是,我们想的是,很多情况下,实

    2024年02月05日
    浏览(88)
  • MySQL高级特性篇(7)-数据库版本控制与迁移

    MySQL数据库版本控制与迁移 在软件开发的过程中,数据库版本控制和迁移是非常重要的一部分。这些过程确保了数据库的结构及数据的追踪和更新。在本篇博客中,我们将介绍如何使用Markdown语法来编写MySQL数据库版本控制与迁移的相关内容。 MySQL数据库版本控制与迁移是指在

    2024年02月22日
    浏览(49)
  • 第90讲:MySQL数据库主从复制集群原理概念以及搭建流程

    1.1.什么是主从复制集群 主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。 MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主

    2024年01月20日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包