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();
    源码,是痛苦的,又是快乐的,如果没有这痛苦,也就没有了这快乐!
  • 相关阅读:
    cat
    cal
    API、ABI区别
    html 实体转换为字符:转换 UEditor 编辑器 ( 在 ThinkPHP 3.2.2 中 ) 保存的数据
    IDEA突然无法运行
    Java实现 蓝桥杯 算法提高 成绩排名
    Java实现 蓝桥杯 算法提高 成绩排名
    Java实现 蓝桥杯 算法提高 成绩排名
    Java实现 蓝桥杯 算法提高 Monday-Saturday质因子
    Java实现 蓝桥杯 算法提高 Monday-Saturday质因子
  • 原文地址:https://www.cnblogs.com/erlongxizhu-03/p/14417249.html
Copyright © 2011-2022 走看看