【发布时间】:2018-03-12 11:41:42
【问题描述】:
我有一个大约 20k 行的小表。在该表中有一个名为 random_uid (INT NOT NULL) 的列。我想用一个随机的唯一编号更新所有 20k 行。
由于我的表很小,我认为我不需要使用字符串或 UUID,所以我选择了
SELECT FLOOR(RAND() * 100000000) AS random_num
FROM table1
WHERE "random_num" NOT IN (SELECT random_uid FROM table1)
LIMIT 1;
我的问题是我无法从同一个表中更新和选择,所以我在创建 UPDATE 查询时遇到了麻烦。
编辑:
我对上述随机性没有问题,因为我没有将它用于任何安全目的,只是为每一行创建唯一 ids,而不仅仅是增加。由于用于验证同一数字不存在于另一行中的选择,我不能使用UPDATE,这就是问题所在。
【问题讨论】:
-
随机且独一无二。棘手。
-
伪随机且唯一(在小型数据库中)听起来更合理,不是吗。
-
请记住
RAND()会产生相当可预测的数字,尤其是当您将其限制在相对较小的值范围内时。如果你需要这些是真正不可预测的,你将不得不使用不同的生成器。 -
这不是为了任何与安全相关的事情,所以我不认为这是一个问题,除非我忽略了一些问题。
-
如果您创建一个具有自动递增 id 的新表,然后以随机顺序将所有行插入其中?
标签: mysql random sql-update