我在存储过程中使用while循环更新表的每一行,但所有行的更新值均保持不变。例如,在我的表中,所有行的生成数字均为2266,而不是唯一数字。
我的存储过程如下所示
DELIMITER ;;
CREATE PROCEDURE lesrows()
BEGIN
DECLARE n INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
DECLARE lesrand INT DEFAULT 0;
SELECT COUNT(*) FROM students INTO n;
select(FLOOR(2000 + RAND() * (3000 - 2000) )) into lesrand;
SET i=0;
WHILE i<n DO
UPDATE students set student_number= lesrand;
SET i = i + 1;
END WHILE;
End;
;;
call lesrows();
为什么要为所有行插入一个常数而不是为每一行插入一个唯一数?
最佳答案
while语句在每次迭代中设置整个表的student_number的lesrand。您需要每个迭代的新随机数(在循环内),并且要使用WHERE和变量i来逐一选择学生
像这样:
SET i=0;
WHILE i<n DO
select(FLOOR(2000 + RAND() * (3000 - 2000) )) into lesrand;
UPDATE students set student_number= lesrand WHERE student_ID = i;
SET i = i + 1;
END WHILE;
关于mysql - 用随机数更新表行失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17919366/