CREATE DEFINER=`root`@`localhost` PROCEDURE `test10`()
BEGIN
#存储过程游标的使用20190107
DECLARE stopflag int DEFAULT 0 ;#定义一个停止的标志,没有停止就是0,停止了就是1
DECLARE my_uname varchar(32) DEFAULT'';#把uname取出来再做进一步的修改
#游标就是一个查询的结果集,它保存到一个变量中
DECLARE uname_cur CURSOR for SELECT uname FROM users where uid%2 = 0;#游标指定一个查询使用for
#定义一个到达结尾的时候应该把stopflag重置为什么值
#(声明游标句柄)CONTINUE HANDLER就是一个游标的句柄,它会跟踪上一个游标的变量,当到达游标最后的时候,设置标志位1
# 设置为1的目标用于后面条件语句或者循环语句进行对值的判断以便判断它是否继续
DECLARE CONTINUE HANDLER for not found set stopflag = 1;
#打开游标,就是把这个结果集开始使用
open uname_cur;
#取 每取一次只取一条记录,取一次往前走一步,
FETCH uname_cur into my_uname;
while (stopflag = 0 ) do
begin
#加一个_cur说明游标是更新的:即在uid为偶数的名字后加_cur
update users set uname = concat(my_uname , '_cur')where uname = my_uname ;
FETCH uname_cur into my_uname;
end;
end while ;
#跳出循环说明游标已经达到结尾,保存的变量uname_cur是放在内存中的,如果不释放它,占用的内存资源就会一直保存。
#所以要关闭游标,关闭占用的内存资源
close uname_cur;
END
视频总结: