用 Navicat 写mysql的游标
2016-01-15 11:22
639 查看
千言万语也比不上一个简单直接明了的小例子:
[b]注意了:这些声明语法必须写在存储过程里面才生效,否则navicat就提示语法错误。[/b]
完了执行一下:
与sql不同,mysql执行存储过程使用call命令。
删除存储过程:
删除存储过程,mysql和sql一样都用drop。
其他:
mysql使用select into的形式给变量赋值,RAND()随机记录,LIMIT 1代替TOP 1
这句话在sql里面的写法:
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; #读取游标中的数据一一复给变量myid。 select 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
[b]注意了:这些声明语法必须写在存储过程里面才生效,否则navicat就提示语法错误。[/b]
完了执行一下:
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();
相关文章推荐
- MySQL单表查询之分组查询
- msyql5.6双mysql安装以及简单优化
- percona-toolkit工具检查mysql复制一致性及修复不一致性
- ubuntu14.04下通过.frm, .MYD,.MYI文件恢复建立mysql数据库
- MySQL修改root密码的多种方法
- node.js连接MySQL
- mysql单表查询之多条件查询
- MySQL5.7 对半同步复制的改进
- Mac OS X修改mysql配置
- mysql load data infile 指定文件中的字段导入
- MYSQL备份与恢复精华篇
- brew install mysql
- 删除庞大的MySQL binlog实操
- mysql+mybatis 集合查询配置
- mysql where条件中的判断语句
- MySQL配置文件my.cnf详解
- MySQL5.7多实例自动化部署脚本
- Mac 10.11 安装mysql utilites source
- ubuntu14.04下mysql数据库的默认存放路径并修改
- mysql-5.6.24主从复制