繁体   English   中英

如何生成唯一的随机数?

[英]How to Generate unique random number?

有人可以告诉我一种创建新记录时自动在mysql数据库表中放置唯一随机数的好方法。

我将创建一个带有数字池的表:

Create Table pool (number int PRIMARY KEY AUTO_INCREMENT);
Insert Into pool (),(),(),(),(),(),(),(),…;

然后定义一个触发器,从该池中选择一个随机数:

CREATE TRIGGER pickrand BEFORE INSERT ON mytable 
FOR EACH ROW BEGIN
  DECLARE nr int;
  SET nr = (SELECT number FROM pool order by rand() limit 1);
  DELETE FROM pool WHERE number = nr;
  SET NEW.nr = nr;
END

为了避免并发问题,您必须在事务中运行查询。 如果性能成为问题(由于order by rand()较慢),则可以更改选择随机记录的方式

最好的选择是Autoincrement

语法请看这里

也许对于随机数试试这个!

select FLOOR(RAND() * 401) + 100

编辑

SELECT FLOOR(RAND() * 99999) AS sup_rand
FROM table
WHERE "sup_rand" NOT IN (SELECT sup_rand FROM table)
LIMIT 1

脚步:

1.Generate a random number
2.Check if its already present
3.if not continue use the number
4.Repeat

您的唯一性随机性标准通常存在冲突。 您可以轻松地完成一个或另一个,但是两者都很困难,并且在测试要插入的新潜在数字时需要评估每一行。

满足您条件的最佳方法是使用UUID函数生成UUID

更好的选择是重新评估您的设计并删除(唯一,随机)标准之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM