Mysql使用随机值插入多行

时间:2017-02-28 18:25:05

标签: mysql

您好我正在尝试向user_acc表插入100-200个新行,但由于某种原因,我当前的代码什么都不做。

DELIMITER //
DECLARE x INT DEFAULT 0;

 WHILE x < 200 DO
INSERT INTO `user_acc`(`playRegion`, `firsttimelogin`) VALUES
(RAND() * (6)+1,1) ;
SET x = x +1;
 END WHILE;
DELIMITER ;

所以我为每一行添加了playRegion和firsttimelogin,playRegion是随机1-5,而firstimelogin是walways 1.一旦我尝试执行查询,没有任何反应,没有任何错误。

3 个答案:

答案 0 :(得分:1)

以下是使用Loop的存储过程的替代方法:

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;
   INSERT INTO `user_acc`(`playRegion`, `firsttimelogin`) VALUES
   (RAND() * (6)+1,1) ;
    SET int_val = int_val +1;
  END LOOP; 
END;

call proc_loop_test;

select * from `user_acc`;

我仅限于10只用于测试

Functional Example你可以玩

Credit for this solution

答案 1 :(得分:0)

DECLARE Syntax

  仅在 BEGIN ... END 复合语句中允许

DECLARE   并且必须在任何其他陈述之前开始。

答案 2 :(得分:0)

看起来你正在尝试执行一个MySQL不支持的匿名代码块。

您可以创建一个命名存储过程来执行该代码。

我建议使用mysqlslap实用程序,而不是实现自己的存储过程,这样可以轻松生成测试数据。

此命令适用于您:

mysqlslap --iterations 200 \
  --create-schema=test \
  --query="INSERT INTO user_acc(playRegion, firsttimelogin) VALUES (RAND() * (6)+1,1) ;"