mysql游标遍历数据

由于需要将原来的老数据导入到新表中,但是老数据中的user_id 为null,所以需要从b,表中的name 中获取一部分的数据并且随机填充user_id为null的字段中
create table table_user
(
id int auto_increment
primary key,
user_id int null
);

在这里插入图片描述

user_info
在这里插入图片描述

就是需要从user_info表中获取user_id然后随机插入到table_user中去

select 字段 from 表名 where 条件 ORDER BY RAND() limit 1;
从表中随机取出一个数据

使用sql游标遍历table_user表,

create procedure test()
BEGIN
    -- 声明变量
    DECLARE cid INT;
    DECLARE done INT default 0;

-- 创建游标,并设置游标所指的数据(这里设置ID不为1是因为ID为1的是总的大类)
    DECLARE cur CURSOR for
        SELECT id  from table_user;
-- 游标执行完,即遍历结束。设置done的值为1
    DECLARE CONTINUE HANDLER for not FOUND set done = 1;
-- 开启游标
    open cur;
-- 执行循环
    posLoop:
    LOOP
        -- 如果done的值为1,即遍历结束,结束循环
        IF done = 1 THEN
            LEAVE posLoop;
-- 注意,if语句需要添加END IF结束IF
        END IF;
-- 从游标中取出cid
        FETCH cur INTO id ;
        UPDATE table_user tmp
        SET tmp.user_id = (select users_info.user_id
                           from users_info
                           ORDER BY RAND()
                           limit 1)
        where tmp.id = id;
-- 关闭循环
    END LOOP posLoop;
-- 关闭游标
    CLOSE cur;
-- 关闭分隔标记
END;

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值