为电子商务生成高度独特的字符串

时间:2014-02-07 10:52:55

标签: php mysql e-commerce unique-key

为了在我的电子商务应用程序中生成唯一的订单号,我正在考虑两种方法同样担心。

首先:

  1. 通过此算法生成唯一字符串

    $orderNumber = "AU".substr(substr(mt_rand(),2,5) . substr(uniqid(),5,4). substr(time(),6,4),0,18);
    
  2. 然后,检查订单表中是否存在,如果没有继续使用,否则生成另一个。

  3. 第二名:

    1. 创建一个id自动从2147483647递增的表格
    2. 查询表格的最大值,增加1并继续使用剩余的东西
    3. 手头的问题:我怎样才能确保在两种方法中都不会在同一秒内调用该表,这将导致重复的订单号?如果另一个请求在同一时刻进入,mysql会锁定表读操作吗?

      请告知。

1 个答案:

答案 0 :(得分:0)

首先

  1. 您需要在表格上显式锁定。这是因为主键 代码生成是随机的,不确定它是否已经存在 桌子。
  2. 第二次

    1. 使用unsigned bigint的自动递增主键可能更好 选择,如果你真的希望在短时间内有大量的记录。

    2. 无需手动检查表中是否已存在。

    3. 不需要显式锁定,引擎会注意 保持每个请求的生成值的唯一性。