相关疑难解决方法(0)

如何让 MySQL 以随机顺序自动递增?

我有一个表,其中包含进入其他表的几个键(其中每个键由多列组成)。我想为每个键创建一个新列,该列将是一个整数,以便该值i表示该ith键的出现(但我希望该排序是随机的)。我想也许某种自动增量会起作用,但我有多个键,因此需要多列(我相信只允许一个自动增量)。

我想出的解决方案似乎不起作用。首先,我创建了一个新表来存储我感兴趣的列,以及一个额外的列rnd. 我rnd稍后会ORDER BY rand()在需要实际列而不是函数的上下文中使用。这是我如何完成第一点:

SET @rnd = 0;
INSERT INTO new_table SELECT col1, ..., colN, @rnd := @rnd+1 FROM original_table ORDER BY rand();
Run Code Online (Sandbox Code Playgroud)

接下来,我将根据键添加一个自动增量,并使用rnd我刚刚创建的列。在ALTER TABLE...ORDER BY不通过函数(如允许排序rand()),所以这就是为什么我需要创建的rnd第一列:

ALTER TABLE new_table ADD first_index INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD KEY(col1, col2, first_index), ORDER BY rnd;
Run Code Online (Sandbox Code Playgroud)

然后我会删除自动增量状态并为每个键重复:

ALTER TABLE new_table MODIFY COLUMN first_index INT UNSIGNED NOT NULL;
Run Code Online (Sandbox Code Playgroud)

起初,这似乎奏效了。然而,仔细检查后,似乎没有遵守随机排序。索引列的创建顺序与原始表碰巧使用的顺序相同。当我经历了几个非常尴尬的步骤以确保随机排序时,我感到相当沮丧,而这甚至不起作用。为什么我的解决方案不起作用,有没有更优雅的方法来做到这一点?

编辑:显然我不清楚我在找什么,所以我会尝试一个简单的例子:

Col1   Col2   <other columns>
1997 …
Run Code Online (Sandbox Code Playgroud)

mysql order-by auto-increment random

5
推荐指数
1
解决办法
5531
查看次数

标签 统计

auto-increment ×1

mysql ×1

order-by ×1

random ×1