2010-02-18 53 views
1

我建設,需要一個隨機唯一的ID爲每個用戶不是一個序列什麼是使用PHP

mysql數據庫

ID Username 

我唯一的隨機應用程序創建隨機mysql的ID的最佳方式ID,最好的方法是什麼?

+0

爲什麼它必須是隨機唯一的ID而不是auto-inc? auto-inc更安全並確保唯一的編號。但是如果你說在兩臺機器上的兩個數據庫上分割數據庫,你可以在每個數據庫上擁有相同的auto-inc。 還記得1 2 3 4 5 6基本上和5 3 6 4 1 2一樣隨機(如果不是人眼) – PurplePilot 2010-02-18 11:44:44

回答

2

PHP提供了一個uniqid函數,我想這可能會有訣竅。

注意它返回一個字符串,但不是一個整數。


另一個想法是生成/使用一些GUID - 有關於在uniqid手冊頁的用戶注意事項提出了一些建議。

+0

如果我使用$ unique_id = unique();我應該檢查這個ID是否已經存在於數據庫中?或不 ? – trrrrrrm 2010-02-18 11:34:27

+0

總是有一個風險(非常小,但存在)同一個「唯一」ID會產生兩次...所以你必須處理這種可能性;;;仍然,因爲這是不太可能的,我會在數據庫中使用UNIQUE索引,嘗試插入,並只處理「插入失敗,因爲重複條目」的問題 - 即我插入*之前不檢查(但這不是最簡潔的方式^^)* – 2010-02-18 11:38:58

1

我仍然有正常的自動增量主鍵來正確識別每一行,這只是標準的約定。

然後,我會有另一個名爲'user_id'的索引列或其他東西,並使用uniqid();

+0

如果我使用$ unique_id = unique();我應該檢查這個ID是否已經存在於數據庫中?或不 ? – trrrrrrm 2010-02-18 11:38:59

+0

如果你不確定'$ unique_id'是否真的是唯一的,你應該這樣做。 – 2010-02-18 12:02:53

1

MySQL提供了函數調用UUID():

http://dev.mysql.com/doc/refman/5.1/en/miscellaneous-functions.html#function_uuid

文檔聲稱此:

甲UUID被設計爲一個數字,是 在空間和時間全局唯一的。兩個 調用UUID()預計 生成兩個不同的值,即使這些調用 是在兩個 不是 互相連接的單獨的計算機上執行。

這應該涵蓋您的需求。

+0

對我而言,「預計」與「意志」或「保證」並不完全相同。你必須記住,正確的術語是「僞隨機數」,它與隨機數不一樣,即真正隨機的,並且可能不會是隨機的,可以在多次迭代之後重複,從而產生相同的數字序列同樣的種子等等。(在他的一本書中閱讀Donald Knuth關於此的章節以獲得真正的讚賞)。 要得到一個獨特的隨機數me.to.you willo需要從單一來源生成。但是,由於他沒有告訴我們使用情況,這是一個猜測。 – PurplePilot 2010-02-18 12:29:00