2017-02-28 78 views
1

你好,我正在尝试向user_acc表中插入100-200个新行,但由于某种原因,我当前的代码无能为力。Mysql插入多行随机值

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.一次我尝试执行查询什么也没有发生任何错误罢了。

回答

0

下面是一个使用存储过程的替代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

+0

语法错误线3个 –

+0

@EgiDijus精心制作,检查rextester链接,做工精细 – EoinS

+0

您可以使用工作台保存存储的过程,但如果从shell中运行以其它方式使用分隔符。你不能运行匿名块,需要存储过程 – EoinS

0

DECLARE Syntax

DECLARE只允许内部的一个BEGIN ... END复合语句 并且必须在它的开始,任何其他语句之前。

0

它看起来像你试图执行匿名代码块,MySQL不支持。

您可以创建一个指定的存储过程来执行该代码。

而不是实现自己的存储过程,我的建议是使用mysqlslap实用程序,它可以很容易地生成测试数据。

这个命令应该为你工作:

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

第1行1064的语法错误,而且我正在使用5.6如果它们必须对它做任何事情 –

+0

你需要运行' mysqlslap',而不是在mysql命令行。 –

+0

试图运行shell但我的密码都不正确 –