• 用 Navicat 写mysql的游标


    千言万语也比不上一个简单直接明了的小例子:

    CREATE PROCEDURE pro_users()
    begin
             DECLARE myid int;
             DECLARE no int;
             DECLARE mysellerid char(10);    
             DECLARE mylink char(50);    
             DECLARE myip char(50);    
             DECLARE mycursor CURSOR FOR select id from table1; #把select出来的数据全部保存到游标mycursor中
             DECLARE CONTINUE HANDLER FOR NOT FOUND SET no=1; #当读到数据的最后一条时,设置no变量为1
             SET no=0; #初始化变量no为0
             OPEN mycursor; #打开游标
                         while no=0 do #判断是不是到了最后一条数据
                                     fetch mycursor into myid; #读取游标中的数据一一复给变量myidselect sellerid,link,ip into mysellerid,mylink,myip
                                        from table2 order by RAND() LIMIT 1;
                                        update table1 set 
                                        wangba_uid = ceil(rand()*500),
                                        wangba_sellerid = mysellerid,
                                        wangba_link = mylink,
                                        wangba_ip = myip
                                        where id = myid;
                         end while;
             close mycursor;#最后关闭游标.游标里面存放了那么多数据总是要清理掉的吧。
    end

    注意了:这些声明语法必须写在存储过程里面才生效,否则navicat就提示语法错误。

    完了执行一下:

    call pro_users()

    与sql不同,mysql执行存储过程使用call命令。

    删除存储过程:

    drop PROCEDURE pro_users

    删除存储过程,mysql和sql一样都用drop。

    其他:

    select sellerid,link,ip into mysellerid,mylink,myip from table2 order by RAND() LIMIT 1;

    mysql使用select into的形式给变量赋值,RAND()随机记录,LIMIT 1代替TOP 1

    这句话在sql里面的写法:

    select top 1 mysellerid=sellerid,mylink=link,myip=ip from table2 order by newid();
  • 相关阅读:
    Redis分布式锁的正确加锁与解锁方式
    高并发系统中的限流算法
    谈谈 InnoDB引擎中的一些索引策略
    面试必问:手写一个内存泄漏的程序
    空指针异常与Optional类
    Redis的内存淘汰策略
    explain的关键字段的意义
    pycharm编辑器简单配置-- 持续更新完善
    vscode 插件-better comments-代码注释高亮
    阿里前端开发规范-转载
  • 原文地址:https://www.cnblogs.com/vinsonLu/p/5132771.html
Copyright © 2020-2023  润新知