zoukankan      html  css  js  c++  java
  • 将一个表字段更新到另一个表字段,数据量大使用存储过程不会锁表

    将一个表所需数据查出来存到集合变量中,然后循环游标更新另一张表。

    -- 取值设置到临时变量中
    FETCH ossList INTO oss,cdkey;

    DROP PROCEDURE IF EXISTS staff_zt_test;
    -- 存储过程
    CREATE PROCEDURE staff_zt_test()
    BEGIN
        -- 该变量用于标识是否还有数据需遍历
        DECLARE flag INT DEFAULT 0;
        -- 创建一个变量用来存储遍历过程中的值
        DECLARE oss VARCHAR(64);
        DECLARE cdkey VARCHAR(255);
        -- 查询出需要遍历的数据集合
        DECLARE ossList CURSOR FOR (select a.oss,a.cdkey from account a WHERE a.oss is not null);
        -- 查询是否有下一个数据,没有将标识设为1,相当于hasNext
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag = 1;
        -- 打开游标
        OPEN ossList;
            -- 取值设置到临时变量中
            FETCH ossList INTO oss,cdkey;
            -- 遍历未结束就一直执行
            WHILE flag != 1 DO
                    -- targetSQL //你想要执行的目标功能,这里可以写多个SQL
                    
                    --   注意
                    -- 这里有一个坑,目标语句引用临时变量,实测发现不需要加@符号,但是搜索到的结果都是例如:@id ,这样来使用,实测发现无法取到数据
                    --   注意
                    update created_player cp set cp.oss =oss where cp.account = cdkey;
                    -- 一定要记得把游标向后移一位,这个坑我替各位踩过了,不需要再踩了
                    FETCH ossList INTO oss,cdkey;
                    -- FETCH cdkeyList INTO cdkey;
            END WHILE;
        CLOSE ossList;
    END;
    -- 执行存储过程 call staff_zt_test();
    源码,是痛苦的,又是快乐的,如果没有这痛苦,也就没有了这快乐!
  • 相关阅读:
    Docker 容器知识点
    Docker 常用命令
    杜教筛
    后缀自动机相关
    期望DP
    从零开始的莫比乌斯反演(函数)[详细推导]
    欧拉函数|(扩展)欧拉定理|欧拉反演
    优美诗词(持续更新)
    魔法 [线段树优化DP]
    stone2 [期望]
  • 原文地址:https://www.cnblogs.com/erlongxizhu-03/p/14417249.html
Copyright © 2011-2022 走看看