首页 > 数据库 >mysql 游标 示例

mysql 游标 示例

时间:2024-11-07 10:47:35浏览次数:4  
标签:示例 -- 游标 score result student mysql id

提示:mysql 游标必须要在在存储过程中才能使用,不能单独使用

数据表

CREATE TABLE `student_score` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `student_id` varchar(128) DEFAULT NULL,
  `student_course_name` varchar(128) DEFAULT NULL,
  `score` int DEFAULT NULL,
  `result` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `student_score` (`id`, `student_id`, `student_course_name`, `score`, `result`)
VALUES
	('1', '001', '语文', '95', NULL),
	('2', '002', '语文', '80', NULL),
	('3', '003', '语文', '59', NULL);

代码示例

-- 定义分隔符为 //
DELIMITER //

-- 创建存储过程
CREATE PROCEDURE set_student_result()
BEGIN
	-- 定义变量,提示:定义变量语句 需要放在 定义游标语句 之前
	declare var_score int;
	declare var_id varchar(128);

	-- 定义游标查询结束标识
	declare done int default false;
	-- 定义游标
	declare cur cursor for select student_id, score from student_score where score > 0;
	-- 当 fetch 游标未发现数据时,done 置为 TRUE
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

	-- 开启游标
	open cur;

	-- 游标遍历数据:填充学生成绩表 result 字段,当分数 score 小于 60 时候为不及格,大于等于 60 时为及格
	read_loop: loop
		fetch cur into var_id, var_score;
		
		if done then
			leave read_loop;
		end if;
		
		if var_score >= 60 then
			update student_score set result = '及格' where student_id = var_id;
		end if;
	
		if var_score < 60 then
			update student_score set result = '不及格' where student_id = var_id;
		end if;
		
	end loop;
	-- 关闭游标
	close cur;
-- 存储过程结束
END //

-- 恢复定义分隔符为 ;
DELIMITER ;

SHOW PROCEDURE STATUS;

CALL set_student_result();

DROP PROCEDURE IF EXISTS set_student_result;

 

标签:示例,--,游标,score,result,student,mysql,id
From: https://www.cnblogs.com/baokang/p/18531723

相关文章

  • Java面试系列-MySQL面试题20道,InnoDB,索引类型,事务隔离级别,锁机制,MVCC,主从复制,慢查询,分
    文章目录1.MySQL中的InnoDB和MyISAM存储引擎有什么区别?2.MySQL中的索引类型有哪些?3.MySQL中的索引是如何工作的?4.MySQL中的事务隔离级别有哪些?5.MySQL中的锁机制有哪些?6.MySQL中的MVCC(多版本并发控制)是如何工作的?7.MySQL中的主从复制是如何工作的?8.MySQL中的分区......
  • mysql学习必备四大语法 增 删 改 查
    SQL(结构化查询语言)是用于管理关系型数据库的标准语言。增、删、改、查是对数据库表中数据进行基本操作的四种主要功能,通常称为CRUD(Create,Read,Update,Delete)。以下是这四个操作的详细讲解和示例1.增(Create)功能:简单来说插入数据库表中新记录SQL语法:表名:你想要插入数......
  • 服务器上mysqld,java的进程Out of Memory,被kernel kill 掉了
    /var/log/messages里面日志如下Aug1019:47:16VM-0-7-centoskernel:8936totalpagecachepagesAug1019:47:16VM-0-7-centoskernel:0pagesinswapcacheAug1019:47:16VM-0-7-centoskernel:Swapcachestats:add0,delete0,find0/0Aug1019:47:16VM-0......
  • 系统变量group_replication_group_seeds为空导致MySQL节点无法启动组复制
    MySQLInnoDBCluster集群中一个节点,在服务器重启过后,启动MySQL实例后,发现status为MISSING,另外memberState为OFFLINE状态。如下所示: MySQL  mysqldbu02:7306 ssl  JS > cluster.status(){    "clusterName": "yssps",     "defaultReplicaSet": {      ......
  • Ubuntu Linux中安装MySQL教程
    在UbuntuLinux中安装MySQL步骤步骤一:更新软件包列表首先,更新你的软件包列表:sudoaptupdate步骤二:安装MySQL服务器使用以下命令安装MySQL服务器:sudoaptinstallmysql-server步骤三:启动MySQL服务安装完成后,启动MySQL服务:sudosystemctlstartmysql......
  • mysql 事务隔离级别
    在数据库中两个事务并发执行的时候会产生以下问题:脏读:当有事务修改了一条记录但未提交,另一事务读取该记录前后结果不一致不可重复读:当有事务修改了一条记录并且已经提交,另一事务前后读取该记录前后结果不一致幻读:当有事务新增了记录并且已经提交,另一事务中前后查出记录数不一......
  • mysql的 information_schema 数据库介绍
    information_schema是MySQL中的一个系统数据库,它提供了关于数据库元数据的信息。元数据是指描述数据库结构和内容的数据,例如表、列、索引、用户权限等。information_schema数据库是只读的,用户不能对其进行修改。位置information_schema数据库存在于每个MySQL实例中,不需要......
  • MySQL性能抖动
    当内存数据页跟磁盘数据页内容不一致的时,称这个内存页为“脏页”。内存数据写入磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。平时执行很快的更新操作,就是在写内存和日志,而MySQL偶尔抖一下,可能是在刷脏页。刷脏页的时机redolog写满了,数据库停止所有更新操作,将......
  • MySQL 删除数据 批量删除(大量)数据
    目录一、删除大表的部分数据二、删除带索引的表三、MySQL中的表的删除操作一、删除大表的部分数据一个表有1亿6000万的数据,有一个自增ID。最大值就是1亿6000万,需要删除大于250万以后的数据,有什么办法可以快速删除?看到mysql文档有一种解决方案:http://dev.mysql.com/doc......
  • MySQL 字符串索引和前缀索引
    前缀索引创建前缀索引altertabletaddindexidx_email(email);altertabletaddindexidx_email(email(6));使用前缀索引,定义好长度,可以做到即节省空间,又不用额外增加太多查询成本。区分度建立索引时,区分度(不重复的值)越高越好。selectcount(distanceemail)fromt......