2014-02-07 72 views
1

爲了在我的電子商務應用程序中生成唯一的訂單號碼,我正在考慮兩個方法同樣的擔心。爲電子商務生成高度唯一的字符串

第一:

  1. 通過這一算法中生成一個唯一的字符串

    $orderNumber = "AU".substr(substr(mt_rand(),2,5) . substr(uniqid(),5,4). substr(time(),6,4),0,18); 
    
  2. 然後,檢查它是否在訂單表存在,如果不繼續使用,否則產生另一個一。

二:

  1. 創建與2147483647
  2. 查詢表的最大值ID自動遞增的表,由一個增加,並與東西休息走在前面

手頭有問題:我如何確保在兩種方法中,表格都是n不會在同一時間打電話,這會導致重複的訂單號碼?如果另一個請求在同一時間進入,mysql將在讀操作上鎖定表嗎?

請指教。

回答

0

首先

  1. 您需要在表上明確鎖。這是因爲主鍵 的代碼生成是隨機的,不確定它是否已經存在於 表中。

  1. 自動遞增的主鍵與unsigned bigint可能是一個更好的選擇 如果你真的在很短的時間期待一個巨大的記錄量。

  2. 無需手動檢查它是否已經存在於表格中。

  3. 顯式鎖定不是必需的,引擎會照顧到 保持每個請求上生成的值的唯一性。

相關問題