什么是游标?游标是存储在MySQL服务器上的数据库查询。它不是SELECT语句,而是该语句检索的结果集。光标存储后,应用程序可以根据需要滚动或浏览其中的数据。注意:MySQL游标只能与存储过程(和函数)一起使用。创建游标在创建游标之前,我们需要先清除游标的语法。1.定义游标DECLARE游标名CURSORFORSQL语句;2.打开游标OPEN游标名;3、获取结果FETCH游标名INTO变量名[,变量名];4.关闭游标CLOSE游标名;我们以Customers表为例:例1:定义一个存储过程,调用时执行里面的游标。CREATEPROCEDUREPROC1()BEGIN--定义两个变量来存储结果DECLARENAMEVARCHAR(20);声明地址VARCHAR(50);--声明游标DECLAREMYCURSORFORSELECTname,addressFROMcustomers;--打开游标OPENMY;--获取结果FETCHMYINTONAME,ADDR;--这里是显示得到的结果SELECTNAME,ADDR;--关闭游标CLOSEMY;结尾;我们执行完上面的存储过程之后,就可以调用存储过程了。调用PROC1();得到结果:这里肯定有小伙伴很好奇,customers表中有7条记录,为什么只显示1条记录?这是因为游标变量只保留了customers表的第一行数据,如果要查看后面的数据,需要循环向下移动游标才能继续查看。示例2:定义一个存储过程。当存储过程被调用时,customers表中的数据被循环写入新表中。CREATEPROCEDUREPROC2()BEGIN--定义两个变量来存储结果DECLAREFLAGINTDEFAULT0;声明名称VARCHAR(20);声明地址VARCHAR(50);--声明游标DECLAREMYCURSORFORSELECTname,addressFROMcustomers;为未找到的SETFLAG=1声明继续处理程序;--打开游标OPENMY;--循环体部分L1:LOOP--得到结果FETCHMYINTONAME,ADDR;如果标志=1,则离开L1;万一;--这里是显示结果INSERTINTOcusVALUES(NAME,ADDR);--关闭游标ENDLOOP;--结束循环CLOSEMY;结尾;然后我们执行这个存储过程,查询cus表中的数据CALLPROC2();SELECT*FROMcus;Result:结果和customers一致,但是这些结果是在循环往下逐个插入的,也就是这个循环执行了7次。以上就是游标的基本操作原理。此外,游标的循环体还有WHILE、REPEAT等操作方式。它们的运行方式类似于LOOP,用于循环执行循环体的内容,直到循环结束。
