我知道如何在PHP和MySQL中创建随机字符,但问题是我必须为大约10,000行的表格创建一个4个字符的随机字符串。什么方法最好确保它保持唯一性?
如果需要,我可以使用更长的字符串,但不能超过12个字符。
为了简单起见,表格已经存在,我需要添加一个额外的列并填充它以获得4个字符的随机字符串,并且键必须保持唯一。
我知道如何在PHP和MySQL中创建随机字符,但问题是我必须为大约10,000行的表格创建一个4个字符的随机字符串。什么方法最好确保它保持唯一性?
如果需要,我可以使用更长的字符串,但不能超过12个字符。
为了简单起见,表格已经存在,我需要添加一个额外的列并填充它以获得4个字符的随机字符串,并且键必须保持唯一。
val
------
0
1
...
9
a
b
...
z
SELECT CONCAT(a.val,b.val,c.val,d.val)
FROM chars AS a
JOIN chars AS b
JOIN chars AS c
JOIN chars AS d
ORDER BY RAND()
LIMIT 10000
0-9a-z
,则意味着该表格将占用364。那只是几MB而已。DISTINCT
。mysql> SELECT DISTINCT random_strings FROM chars;
这可能会很冗长,但可以让您创建所需的内容:
CREATE FUNCTION gen_alphanum () RETURNS CHAR(4)
RETURN
ELT(FLOOR(1 + (RAND() * (50-1))), 'a','b','c','d','e','f','g','h','i','j','k','l','m ','n','o','p','q','r','s','t','u','v','w','x','y', 'z',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y', 'Z',);
)
看起来你已经在MySQL中编写了创建这些随机值字符串的代码。
考虑以下选项:
在MySQL中创建一个用户定义函数。让该函数运行SQL语句以生成并返回此新的随机字符串。确保在创建语句中使用NOT EXISTS(SELECT MyRandomString FROM MyTable)
来检查该随机字符串是否已存在于表中。
插入新行时,使用此函数的返回值分配给MyRandomString
列。
要更新现有数据,只需:
UPDATE MyTable
SET MyRandomString = fn_CreateSomeRandomString()
INSERT INTO MyTable (foo, bar, MyRandomString)
VALUES ('','', fn_CreateSomeRandomString());
这里有一个在PasteBin上的UDF示例。
select LEFT( TO_BASE64( SHA(rand()) ), 6 ) ;
如果您没有5.6版本,
DELIMITER //
drop function if exists randChr //
create function randChr()
returns char
BEGIN
IF RAND() <= 0.5 THEN -- Lowercase
return CHAR( 97 + 25*rand() ) ;
ELSE -- uc
return CHAR( 65 + 25*rand() ) ;
END IF;
END //
drop function if exists randString //
create function randString( len int )
returns varchar(255)
BEGIN
SET @n = 0;
SET @res = '' ;
REPEAT
SET @res = concat( @res, randChr() ) ;
set @n = @n + 1 ;
UNTIL @n >= len END REPEAT;
return @res ;
END //
DELIMITER ;
-- USE:
select randString( 5 );
select randString( 60 );