2017-02-28 62 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但我的密碼都不正確 –