我在存储过程中使用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/

10-10 05:54