如何遍历表并在MySQL中抢行?

时间:2019-05-08 17:55:38

标签: mysql sql while-loop

我要完成的工作是遍历表的所有行并一次抓取一行并对其进行处理。像这样

BEGIN
    DECLARE x INT;
    DECLARE countmax INT; 
    DECLARE id INT;
    DECLARE name VARCHAR(255);
    SET x = 1;
    SET id = 0;
    SET countmax = (select count(*) from Appian.APPIAN_DATA);
    SET FOREIGN_KEY_CHECKS = 0;

    WHILE x < countmax DO
        SET name = (SELECT FULL_NAME
                    FROM Appian.APPIAN_DATA 
                    WHERE ID = x
                    );
        #do something with above result here later.
        SET x = x + 1;

    END WHILE;
    select name;

END

从上面,名称返回null。我检查了x是否正确增加,这似乎很好。我想获取ID为x的行。 第一次在SQL中使用循环,因此不确定是否允许循环。但是,我还没有看到人们在循环内使用选择,主要是操纵数据和更新行。最终目标是创建临时表,并在操作后将每一行插入其中。对于专家来说,我在这里做什么愚蠢的事情,因为我无法从表中提取数据并将其分配给变量? 编辑:更新的代码更加清晰

1 个答案:

答案 0 :(得分:0)

发布的代码只会查看ID = 379,我假设您打算使用“ WHERE ID = x”。

此外,您通常可以在不使用循环的情况下完成所需的操作,但是如果您坚持要进行迭代编程,请考虑学习游标。它将以更简单的语法为您处理while循环内的一些小细节。

https://dev.mysql.com/doc/refman/8.0/en/cursors.html