为电子商务生成高度唯一的字符串
问题描述:
为了在我的电子商务应用程序中生成唯一的订单号码,我正在考虑两个方法同样的担心。为电子商务生成高度唯一的字符串
第一:
-
通过这一算法中生成一个唯一的字符串
$orderNumber = "AU".substr(substr(mt_rand(),2,5) . substr(uniqid(),5,4). substr(time(),6,4),0,18);
然后,检查它是否在订单表存在,如果不继续使用,否则产生另一个一。
二:
- 创建与2147483647
- 查询表的最大值ID自动递增的表,由一个增加,并与东西休息走在前面
手头有问题:我如何确保在两种方法中,表格都是n不会在同一时间打电话,这会导致重复的订单号码?如果另一个请求在同一时间进入,mysql
将在读操作上锁定表吗?
请指教。
答
首先:
- 您需要在表上明确锁。这是因为主键 的代码生成是随机的,不确定它是否已经存在于 表中。
二:
自动递增的主键与
unsigned bigint
可能是一个更好的选择 如果你真的在很短的时间期待一个巨大的记录量。无需手动检查它是否已经存在于表格中。
显式锁定不是必需的,引擎会照顾到 保持每个请求上生成的值的唯一性。