MySQL CURSOR游标
1、游标是一个存储在MySQL服务器上的数据库查询,它不是一条select语句,而是被该语句所检索出来的结果集。2、游标是针对行操作的,所以对从数据库中select查询得到的每一行可以进行分开的独立的相同或不同的操作,是一种分离的思想3、游标的缺点是只能一行一行操作,在数据量大的情况下,是不适用的,速度过慢,会有死锁情况发生(几万条吧,10万左右就会经常)。新建表,插入数据 CREAT...
·
1、游标是一个存储在MySQL服务器上的数据库查询,它不是一条select语句,而是被该语句所检索出来的结果集。
2、游标是针对行操作的,所以对从数据库中select查询得到的每一行可以进行分开的独立的相同或不同的操作,是一种分离的思想
3、游标的缺点是只能一行一行操作,在数据量大的情况下,是不适用的,速度过慢,会有死锁情况发生(几万条吧,10万左右就会经常)。
- 新建表,插入数据
CREATE TABLE IF NOT EXISTS `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `create_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7; INSERT INTO `t_user` (`id`, `name`,`create_time`) VALUES (1, 'zs','2019-04-20 12:12:12'), (2, 'ls','2019-04-20 12:12:12'), (3, 'ww','2019-04-20 12:12:12'), (4, 'gz','2019-04-20 12:12:12'), (5, 'mr','2019-04-20 12:12:12'), (6, 'ls','2019-04-20 12:12:12');
- 创建存储过程,编写游标
CREATE DEFINER=`xx`@`%` PROCEDURE `P_getAllDate`() BEGIN DECLARE id_ int(11); DECLARE name_ VARCHAR(24); DECLARE doned INT DEFAULT 0;-- 结束标志变量 DECLARE total INT DEFAULT 0; -- 创建总数变量 DECLARE evt_cursor CURSOR FOR( # 声明游标 SELECT DISTINCT id,name FROM t_user WHERE create_time>='2019-01-01 00:00:00' ); DECLARE CONTINUE HANDLER FOR NOT FOUND SET doned = 1; # 设置结尾 #设置初始值 set total = 0; open evt_cursor; # 打开游标 f_loop:LOOP-- ?? FETCH evt_cursor into id_, name_; IF doned=1 THEN LEAVE f_loop; ##--到结尾了跳出循环 END IF; -- 其他操作 set total = total + 1; -- 获取一条数据时,将count值进行累加操作; end loop; -- 结束游标循环; CLOSE evt_cursor; # 关闭游标 select total;-- 数量 END
- 截图:
1
更多推荐
所有评论(0)