这是一个精通PHP和MYSQL的人。
我正在寻找一种方法来为数据库中的每个条目生成唯一但随机的长编号ID。
我不希望它从通常的那个开始,
我想要更长一点的东西。有没有人知道任何可以实现此目的的简单函数或代码片段?
答案 0 :(得分:3)
您可以更改表格AUTO_INCREMENT
的{{1}}种子,以获得最初更大的数字。
PRIMARY KEY
在表格中插入行时为CREATE TABLE example (
nid INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50)
) AUTO_INCREMENT = 200000;
生成的下一个值为nid
要更改现有表格的200001
种子,您可以使用:
AUTO_INCREMENT
答案 1 :(得分:2)
使用函数UUID();
你可以在
上阅读更多内容http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html
mysql> SELECT UUID();
-> '6ccd780c-baba-1026-9564-0040f4311e29'
UUID是一个128位数字,由aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee格式的五个十六进制数字的utf8字符串表示
对于随机数使用RAND()
SELECT (FLOOR( 1 + RAND( ) *10000 ))
答案 2 :(得分:0)
使用random.org生成随机数
在php中生成真正的随机数几乎是不可能的。在足够大的样本中,缺陷很明显,因为PHP使用伪随机数生成器来处理rand()等等。
http://www.random.org/randomness/
您可以使用curl生成并调用随机数。
答案 3 :(得分:0)
是插入还是更新现有表?
假设插入物你可以使用这样的东西。
INSERT INTO someTable (aField, aNotherField, SomeNumber)
SELECT 'aFieldValue', 'aNotherField', aNum
FROM (SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum
UNION SELECT ROUND(RAND() * 899999) + 100000 AS aNum) Sub1
LEFT JOIN someTable ON Sub1.aNum = someTable.SomeNumber
WHERE someTable.SomeNumber IS NULL
LIMIT 1
这将在100000和999999之间生成10个随机数,并选择一个尚未使用的随机数。
这是一种非常讨厌的方式,并且有明显的主要缺陷,所有10个数字都可以使用。
我倾向于建议可以避免使用随机数。
答案 4 :(得分:-1)
这是唯一的:
$uniqueValue = uniqid('', true)