• 将一个表字段更新到另一个表字段,数据量大使用存储过程不会锁表


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

    -- 取值设置到临时变量中
    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();
    源码,是痛苦的,又是快乐的,如果没有这痛苦,也就没有了这快乐!
  • 相关阅读:
    es index template
    什么是元类
    Normal Data Structure Tricks
    Python 学习笔记
    点分治
    人类智慧贪心
    「JOI 2021 Final」地牢 3
    【美团杯2020】魔塔
    CF917D 的垃圾做法
    【ULR #2】Picks loves segment tree IX
  • 原文地址:https://www.cnblogs.com/erlongxizhu-03/p/14417249.html
Copyright © 2020-2023  润新知