2012-02-13 107 views
0

我搜索一個複雜的SQL代碼,我現在有一個現在可以在0 - 100000之間隨機生成一個值,當它不存在時。MySQL自動生成值

現在我想要下一級,我需要插入一個新的值,當它的隨機字符串的值,它從1開始,我需要改變這個(圖表計數)爲32,當字符串現在將返回一個字符串在32個字符。

該字符串包含所有字符類型包括spical圖表。

問題是我使用折扣券的這個算法和數字沒有許多combinds像數字包括AZZ字符有。

我希望有人能幫助我進行搜索。

回答

0

爲什麼不保留隨機數字,而是通過密碼或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

1

函數代碼側創建一個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