这里是为那些精通PHP和MYSQL的人准备的。
我正在寻找一种方法来生成唯一的,但随机长编号id为每个进入数据库的条目。
我不希望它以通常的
开头我想要长一点的。有人知道任何简单的函数或代码片段,将实现这一点吗?
您可以更改表的PRIMARY KEY
的AUTO_INCREMENT
种子,以获得初始更大的数字。
CREATE TABLE example (
nid INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50)
) AUTO_INCREMENT = 200000;
在表中插入一行时为nid
生成的下一个值将是200001
要更改现有表的AUTO_INCREMENT
种子,可以使用:
ALTER TABLE example AUTO_INCREMENT = 200000;
use function UUID();
你可以在
上阅读更多http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.htmlmysql> SELECT UUID();
-> '6ccd780c-baba-1026-9564-0040f4311e29'
UUID是由5个十六进制数组成的utf8字符串表示的128位数字,格式为aaaaaaaaaa -bbbb-cccc-dddd- eeeeeeeeeeeeee
对于随机数使用RAND()
SELECT (FLOOR( 1 + RAND( ) *10000 ))
使用random.org生成您的随机数
在php中生成真正的随机数几乎是不可能的。在足够大的样本中,缺陷是明显的,因为PHP使用伪随机数生成器来处理rand()等 http://www.random.org/randomness/您可以使用curl生成和调用您的随机数
是在插入,还是更新一个现有的表?
假设对于插入,可以使用这样的代码
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个数字都可能已经被使用过了。
我倾向于认为对随机数的需求是可以避免的。
这是唯一的:
$uniqueValue = uniqid('', true)