我有一个文章数据库,可能希望为每篇文章生成一个唯一的随机整数,以便可以通过https://blablabla.com/articles/8373734等网址访问它们。
我可以在python后端实现这一点,但我们如何在MySQL句子中实现这一点?
例如,新文章已完成,并已插入数据库:
INSERT into article_table (title, date, url_id) VALUES ('asdf', '11/11/1111', 8373734)
这里的url_id是自动生成的唯一随机整数(1000~10000000)。
我相信主键ID和自动增量是解决这个问题的好方法。但我的问题是:
在实际情况中,他们(公司)是否确实使用主ID或自动增量?这可能会暴露您(曾经)在数据库中的数据量。以此https://www.zhihu.com/question/41490222为例,我在41490222附近尝试了数百个数字,但未找到所有返回404。似乎这个数字记录非常稀少,不太可能通过自动增加来实现。
有没有有效的方法来生成这样的随机数而不检查每个循环的重复?
答案 0 :(得分:0)
Use mysql function RAND()
-------------------------
select FLOOR(RAND() * 999999)
答案 1 :(得分:0)
您可以使用UUID()
,或者必须使用数字UUID_SHORT()
。
答案 2 :(得分:0)
虽然我的sql技能有点生疏,但我想你可能想用RAND函数创建一个函数。
CREATE PROCEDURE GetRandomValue()
BEGIN
DECLARE newUrlId INT DEFAULT 0;
WHILE (
newUrlId = 0
OR IF EXISTS(SELECT 1 FROM yourTable WHERE url_id = newUrlId)
)
DO
SET newUrlId = SELECT FLOOR(RAND() * 999999)
END WHILE
RETURN newUrlId
END
然后,为什么要创造这样的大惊小怪,同时你可以使用其他方式来创建更大的随机数"
例如:
function createBiggerNumber(id) {
return (id * constants.MySecretMultiplyValue) + constants.MySecretAddedValue;
}
function extractIdFromBiggerNumber(number) {
return (number - constants.MySecretAddedValue) / constants.MySecretMultiplyValue
}