有人可以告诉我一个很好的方法,可以在创建新记录时自动在mysql数据库表中放置一个唯一的随机数。
答案 0 :(得分:1)
我会创建一个包含数字池的表:
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()
慢),您可以change the way to select a random record。
答案 1 :(得分:0)
您最好的选择是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
答案 2 :(得分:0)
unique 和 random 的条件通常是冲突的。您可以轻松完成其中一个,但两者都很难,并且在测试要插入的新潜在数字时需要评估每一行。
符合条件的最佳方法是使用UUID
function生成UUID。
更好的选择是重新评估您的设计并删除其中一个(独特的,随机的)标准。