MySQL自动生成值
我搜索一个复杂的SQL代码,我现在有一个现在可以在0 - 100000之间随机生成一个值,当它不存在时。MySQL自动生成值
现在我想要下一级,我需要插入一个新的值,当它的随机字符串的值,它从1开始,我需要改变这个(图表计数)为32,当字符串现在将返回一个字符串在32个字符。
该字符串包含所有字符类型包括spical图表。
问题是我使用折扣券的这个算法和数字没有许多combinds像数字包括AZZ字符有。
我希望有人能帮助我进行搜索。
为什么不保留随机数字,而是通过密码或sha1插入,这实际上会占用你的RAND并加密RAND来创建一个随机字符串。你只需要解密它,因为rand的加密值就是你的随机字符串。
的另一种方式是对事物
函数代码侧创建一个GUID来从你选择的字符的集合中的随机字符串:
DELIMITER $$
CREATE FUNCTION random_str() RETURNS char(32)
BEGIN
DECLARE chars varchar(500);
DECLARE rs char(32);
SET rs = '';
SET chars = '[email protected]#$%^&*_';
WHILE (LENGTH(rs) < 32) DO
SET rs = CONCAT(rs, SUBSTRING(chars, RAND() * LENGTH(chars), 1));
END WHILE;
RETURN rs;
END
上唯一索引你的值字段:
ALTER TABLE my_table
ADD UNIQUE INDEX IX_str (str);
然后,我也只是一定要抓住的一次在一个千载难逢的例外,在我的客户端代码,或者你可以做这样的事情来插入新值:
DECLARE c int;
DECLARE rs char(32);
SET c = 1;
WHILE (c > 0) DO
SET rs = random_string();
SELECT c = COUNT(*) FROM my_table WHERE str = rs;
END WHILE;
INSERT INTO my_table (str) VALUES (rs);
如果随机str需要从我的MySQL中的其他值的unik? – ParisNakitaKejser 2012-02-13 19:25:09
听起来好像你已经找到了那部分。请参阅编辑。 – Andrew 2012-02-13 21:22:29
如果你的MySQL有base64功能,那么可能是从随机数和base64编码创建一个二进制字符串,它可能会做你所需要的。 – theglauber 2012-02-13 16:33:56
是的,但我不想那样:)我想要那样生成它,我allredy使用GUID和更多的东西,:) – ParisNakitaKejser 2012-02-13 16:34:20