2017-04-19 85 views
1

我希望讓數據庫列自動生成大約300 ++隨機字母數字字符串,每次我插入一個新的條目到數據庫。下面的代碼只能大小爲36.巨大的MySQL隨機字母數字字符串

DELIMITER ;; 
CREATE TRIGGER testdata 
BEFORE INSERT ON testdata 
FOR EACH ROW 
BEGIN 
    IF new.token IS NULL THEN 
    SET new.token = uuid(); 
    END IF; 
END 
;; 

感謝大家回答這個問題。

+0

這個字符串的目的是什麼?有技術[像這樣](http://stackoverflow.com/questions/16737910/generating-a-random-unique-8-character-string-using-mysql)來生成字母數字序列,但如果你需要一些密碼學上獨特的不可猜測,'RAND()'是太可預測了。 – tadman

+0

嗨。 @tadman感謝您的回覆。這個字符串的目的就像某種認證。心靈建議我應用哪種更好的方法在crytographically獨特? –

+0

UUID類型的值只能是唯一的,而不是不可預測的。對於密碼獨特的東西,你需要一個安全的隨機數發生器,然後以base-62或其他類型的東西進行編碼。這可能不是MySQL要處理的最好的事情,但你可以嘗試。使用外部編程語言要容易得多。 – tadman

回答

1

一種選擇是隻鏈在一起的多個調用的輸出uuid(),即

DELIMITER ;; 
CREATE TRIGGER testdata 
BEFORE INSERT ON testdata 
FOR EACH ROW 
BEGIN 
    IF new.token IS NULL THEN 
     SET new.token = CONCAT(REPLACE(uuid(), '-', ''), REPLACE(uuid(), '-', ''), ...) 
    END IF; 
END 
;; 

注意這裏,我從的UUID刪除連字符,因爲它們是多餘的,並在方式不做多使字符串更隨機。

+0

嗨。 @TimBiegeleisen感謝您的回答。它的工作方式就像我希望的那樣。 –