为了在我的电子商务应用程序中生成唯一的订单号,我正在考虑两种方法同样担心。
首先:
通过此算法生成唯一字符串
$orderNumber = "AU".substr(substr(mt_rand(),2,5) . substr(uniqid(),5,4). substr(time(),6,4),0,18);
然后,检查订单表中是否存在,如果没有继续使用,否则生成另一个。
第二名:
手头的问题:我怎样才能确保在两种方法中都不会在同一秒内调用该表,这将导致重复的订单号?如果另一个请求在同一时刻进入,mysql
会锁定表读操作吗?
请告知。
答案 0 :(得分:0)
首先 :
第二次 :
使用unsigned bigint
的自动递增主键可能更好
选择,如果你真的希望在短时间内有大量的记录。
无需手动检查表中是否已存在。
不需要显式锁定,引擎会注意 保持每个请求的生成值的唯一性。