对于测试,是否可以从 MySQL 工作台或类似工具运行循环?我试过了,但出错了。
如果可能,请提供一个我可以运行的简单示例。
如果没有存储过程,就不能在 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 ;
有限的用例有一个“类似循环”的技巧。
我想为测试创建一个随机整数的大(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;
所以我很快就把行数增加了一倍,直到我得到了我需要的东西。
假设您已经有一个足够长的任意表 myOldTable,您可以使用以下技巧:
set @counter = 0;
select (@counter := @counter+1), @counter*@counter from myOldTable limit 1000;
如果您只想阻塞当前线程,则使用,select sleep(seconds);
否则您可以使用存储过程(如果您想循环某些内容)或 UDF(用户定义函数)。