MySQL中的游标更新查询有什么问题?

MySQL中的游标更新查询有什么问题?,mysql,Mysql,我有一个表,它有一个列order_id,类型int,它们是从1到30的30个数字,并且是唯一的 我想在MySQL中通过查询随机更新此列,但它们必须是唯一的,并且在1到30的范围内。 我尝试了这个,但它有一个问题是“phpmyadmin”在服务器中,并没有显示问题! 有人知道问题出在哪里吗 declare Qid2 int; declare counter int; DECLARE done INT DEFAULT FALSE; declare c cursor set c = cursor f

我有一个表,它有一个列order_id,类型int,它们是从1到30的30个数字,并且是唯一的

我想在MySQL中通过查询随机更新此列,但它们必须是唯一的,并且在1到30的范围内。 我尝试了这个,但它有一个问题是“phpmyadmin”在服务器中,并没有显示问题! 有人知道问题出在哪里吗

declare Qid2 int;
declare counter int;
DECLARE done INT DEFAULT FALSE;

declare c cursor
set c = cursor for select order_id from Table_1
open c;
fetch next from c into Qid2;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
while !done DO


  set Qid2 = (select RAND()*30);
  set counter = ( select count(*) from Table_1 where order_id = Qid2);
  while counter!=0 do
    Begin
      set Qid2 = (select RAND()*30);
       set counter =( select count(*) from Table_1 where order_id = Qid2);
    End while;
  update Table_1
  set order_id = Qid2  where current of c;
  fetch next from c ;


End while;
close c;

不需要接近逻辑,我就可以识别出6个错误(如果没有设置分隔符,可能是7个)。我纠正了明显的错误

drop procedure if exists p;
delimiter $$
create procedure p()
begin 
declare Qid2 int;
declare counter int;
declare order_id int; #error 3 not declared
DECLARE done INT DEFAULT FALSE;

declare c cursor for select order_id from Table_1; #error 1 incorrect syntax
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; #error 2 wrong position in code

open c;
fetch next from c into Qid2;

while !done DO


  set order_id = (select RAND()*30); #error 3 not declared
  set counter = ( select count(*) from Table_1 where order_id = Qid2);
  while counter!=0 do
    #Begin      #error 4 not required
      set Qid2 = (select RAND()*30);
       set counter =( select count(*) from Table_1 where order_id = Qid2);
    End while;
  #update Table_1
  # set order_id = Qid2  where current of c; #error 5 where? commented out
  fetch next from c into Qid2 ; #error 6 into missing.


End while;
close c;

end $$
delimiter ;  

您编辑的此查询在我的服务器中有20多个错误!它在每个“declare”单词和“$$”以及“while”单词中都有错误等等……因为您可能没有在phpmyadmin中设置默认分隔符。对不起,先生,但我对MySQL非常陌生,我不知道这个分隔符是什么以及如何定义它!可能有任何文章可以提供更多详细信息吗?这个查询的逻辑是完全正确的。实际上它在SQL Server中,运行良好,但我想要将其转换为MySQL语言。我删除了“$$”并将其替换为“;”,它工作了,但返回了空结果,我知道原因!我想这是因为这行“set order_id=Qid2 where current of c”。我删除了c的where current,因为它不是MySQL语言,但显示“current line”非常重要。我们如何在MySQL中编写它?谢谢你,先生,但我尝试了这个,它有两个问题:第一,它是一个插入操作,而不是更新。第二,它在“)n”行中显示错误。第二:这显然不是真的。第一:根据更新调整此选择非常简单。第三:你通常不会存储一个容易导出的结果,但我没听清楚!你的意思是我应该有两列,一列按顺序排列,另一列随机更改?我是MySQL新手,但x列似乎不会存储在数据库中,对吗?我想更改已经存储在数据库中的那个列,因为我以后需要它。更新以详细说明所有内容-但您仍然不太可能需要存储此类内容。
DROP TABLE my_table;

CREATE TABLE my_table (i INT NOT NULL);

INSERT INTO my_table VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9);


 SELECT * 
   FROM
      ( SELECT i 
             , @x:=@x+1 x 
          FROM 
             ( SELECT i FROM my_table ORDER BY RAND())a, (SELECT @x:=0) vars
       ) n
   ORDER 
      BY i;
+---+------+
| i | x    |
+---+------+
| 1 |    7 |
| 2 |    2 |
| 3 |    4 |
| 4 |    9 |
| 5 |    3 |
| 6 |    8 |
| 7 |    1 |
| 8 |    6 |
| 9 |    5 |
+---+------+