随机重新分配表PK的值

时间:2009-06-01 17:52:32

标签: mysql random primary-key

在MySQL 5.1中执行以下操作的最简单方法是什么?

我有一个主键作为整数的表,当前运行从1到220. PK根据行写入表的顺序依次运行。

我希望能够随机重新分配这个主键值,例如,第1行(当前PK为1)变为19(例如),第2行变为142(例如),第3行变为99(例如)等等,以便将1到220之间的所有数字重新分配给PK。

有一种简单的方法吗?

谢谢, 添

4 个答案:

答案 0 :(得分:2)

在SQL中完全没有简单的方法。 (很可能是一种不值得的复杂方式。)我建议你把它作为应用程序级逻辑的责任。

我还建议,如果这是针对某种“卡片改组”类型的目的,则使用辅助唯一键而不是主键。

答案 1 :(得分:1)

感谢您的回答。但是,我发现了一个帖子的回复,这完全符合我的要求。它在这里:

MySQL query to assign a unique random number to each row

答案 2 :(得分:0)

使用Rand Function更新主键字段。要获得一个整数,您必须将它乘以100,1000等(取决于您想要的数字的大小),然后截断剩余的小数。

我认为您编写的脚本需要确保没有生成重复的数字,因此尝试更新失败。我通过循环执行此操作,由于Rand的工作原理,单个更新语句不起作用。 (至少对于其他RDBMS)

我们知道你这样做的原因是否重要?原因可能会改变我的答案......

答案 3 :(得分:0)

您需要为ID列分配一个随机值,然后按其排序,并根据排序行中的位置重新分配ID。