在MYSQL中将随机数插入表中

时间:2012-03-14 11:10:52

标签: mysql random count row

我试图计算表格中的行数并为字段“随机”生成随机数 现在这个有效:

SELECT COUNT(*) FROM my_table; 

这有效:

   UPDATE my_table SET random = FLOOR(6500 * RAND()) + 1;

但这不起作用:

UPDATE my_table SET random = FLOOR((SELECT COUNT(*) ) * RAND()) + 1;

但是这会将行计为0并添加一行,因此所有字段都具有第一个而不是唯一的随机数。

任何想法,我做错了都会有所帮助。

2 个答案:

答案 0 :(得分:8)

这个怎么样?

SELECT @cnt := count(*) FROM my_table;
UPDATE my_table SET random = FLOOR(@cnt * RAND()) + 1;

演示:http://sqlfiddle.com/#!2/a896d/4

答案 1 :(得分:0)

你在问你做错了什么。正如MySQL手册所说"目前,您无法更新表并从子查询中的同一个表中进行选择。"这意味着你不能做像

这样的事情
update my_table set random = (select min(my_field) from r);

作为更新的一部分,您正在进行完整的选择。

但是,您可以使用没有找到错误的select,但结果不是您所期望的 - SELECT语句的范围与您使用它时只是当时正在处理的行。您可以通过创建名为num的字段并执行此操作来测试:

update my_table set random = (select count(*));

您会看到每行的random设置为1,因为select正在查看您当时正在更新的那一行。

解决方案是计算行数,将其存储在变量中,并在另一个语句中引用该变量。

SET @row_count = count(*) from my_table;
UPDATE my_table SET random = FLOOR(@cnt * RAND()) + 1;