26

对于测试,是否可以从 MySQL 工作台或类似工具运行循环?我试过了,但出错了。

如果可能,请提供一个我可以运行的简单示例。

4

4 回答 4

21

如果没有存储过程,就不能在 SQL 编辑器中执行 for 循环。我将TOAD 用于 MySQL

一个快速的存储过程应该可以完成这项工作:

DELIMITER $$

DROP PROCEDURE IF EXISTS proc_loop_test$$
CREATE PROCEDURE proc_loop_test()
BEGIN
  DECLARE int_val INT DEFAULT 0;
  test_loop : LOOP
    IF (int_val = 10) THEN
      LEAVE test_loop;
    END IF;

    SET int_val = int_val +1;
    SELECT int_val; 
  END LOOP; 
END$$

DELIMITER ;
于 2013-02-06T23:05:21.587 回答
4

有限的用例有一个“类似循环”的技巧。

我想为测试创建一个随机整数的大(1~200万)行表:

INSERT INTO test_table (num) VALUES(ROUND(RAND() * 1E6));

-- calling this will insert once for every row in test_table
INSERT INTO test_table (num)
SELECT ROUND(RAND() * 1E6)
FROM test_table;

所以我很快就把行数增加了一倍,直到我得到了我需要的东西。

于 2014-11-12T21:12:53.960 回答
1

假设您已经有一个足够长的任意表 myOldTable,您可以使用以下技巧:

set @counter = 0;
select (@counter := @counter+1), @counter*@counter from myOldTable limit 1000;
于 2018-04-16T12:07:37.503 回答
0

如果您只想阻塞当前线程,则使用,select sleep(seconds);否则您可以使用存储过程(如果您想循环某些内容)或 UDF(用户定义函数)。

于 2013-02-07T07:39:28.170 回答