MySQL自动生成值

问题描述:

我搜索一个复杂的SQL代码,我现在有一个现在可以在0 - 100000之间随机生成一个值,当它不存在时。MySQL自动生成值

现在我想要下一级,我需要插入一个新的值,当它的随机字符串的值,它从1开始,我需要改变这个(图表计数)为32,当字符串现在将返回一个字符串在32个字符。

该字符串包含所有字符类型包括spical图表。

问题是我使用折扣券的这个算法和数字没有许多combinds像数字包括AZZ字符有。

我希望有人能帮助我进行搜索。

为什么不保留随机数字,而是通过密码或sha1插入,这实际上会占用你的RAND并加密RAND来创建一个随机字符串。你只需要解密它,因为rand的加密值就是你的随机字符串。

的另一种方式是对事物

+0

如果你的MySQL有base64功能,那么可能是从随机数和base64编码创建一个二进制字符串,它可能会做你所需要的。 – theglauber 2012-02-13 16:33:56

+0

是的,但我不想那样:)我想要那样生成它,我allredy使用GUID和更多的东西,:) – ParisNakitaKejser 2012-02-13 16:34:20

函数代码侧创建一个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); 
+0

如果随机str需要从我的MySQL中的其他值的unik? – ParisNakitaKejser 2012-02-13 19:25:09

+0

听起来好像你已经找到了那部分。请参阅编辑。 – Andrew 2012-02-13 21:22:29