2014-02-07 36 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. 显式锁定不是必需的,引擎会照顾到 保持每个请求上生成的值的唯一性。

相关问题