我正在創建一個網站,將更新貢獻者的帖子,評論等,我想知道創建ID的最好方法,以防止在任何表中重複。我使用的是時間戳的時刻用一個唯一的編號沿末,如:MySQL數據庫ID的
$time = time();
$id= time().'-'.mt_rand(1000, 9999);
到輸出:
1378291391-1167,1378294733-8990,1378294934-3336等,等
任何人都可以看到這種類型的ID創建系統的問題?
我正在創建一個網站,將更新貢獻者的帖子,評論等,我想知道創建ID的最好方法,以防止在任何表中重複。我使用的是時間戳的時刻用一個唯一的編號沿末,如:MySQL數據庫ID的
$time = time();
$id= time().'-'.mt_rand(1000, 9999);
到輸出:
1378291391-1167,1378294733-8990,1378294934-3336等,等
任何人都可以看到這種類型的ID創建系統的問題?
我會用
microtime
增加獨特性(),而不是time()
如果字符串允許的,附加與microtime中功能uniqid()
並使用mt_rand具有較大的值(mt_rand(0, 10000000)
)
這是'uniqid'而不是'uniqueid',我相信這就是你的意思。 http://php.net/manual/en/function.uniqid.php - 我注意到在同一頁面上。我相信那是在PHP.net上發佈它的人的錯誤。 –
是的你是對的 – iiro
使用自動增量如下:
CREATE TABLE tablename(
id MEDIUMINT NOT NULL AUTO_INCREMENT,
col1 CHAR(30) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM;
來源:http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
是,隨機數不能保證唯一 –
這聽起來像一個XY問題。 http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem - 請解釋爲什麼你需要在多個表上獨一無二的ID,我們會告訴你爲什麼這是一個壞主意。 – Halcyon
爲什麼該ID必須是全球唯一的? 'foo.id','bar.id'等...是全局唯一的,即使id部分可以複製到多個表中。 –