我搜索一個複雜的SQL代碼,我現在有一個現在可以在0 - 100000之間隨機生成一個值,當它不存在時。MySQL自動生成值
現在我想要下一級,我需要插入一個新的值,當它的隨機字符串的值,它從1開始,我需要改變這個(圖表計數)爲32,當字符串現在將返回一個字符串在32個字符。
該字符串包含所有字符類型包括spical圖表。
問題是我使用折扣券的這個算法和數字沒有許多combinds像數字包括AZZ字符有。
我希望有人能幫助我進行搜索。
我搜索一個複雜的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