生成序列号或唯一订单号

时间:2010-06-21 05:46:53

标签: php auto-increment serial-number

如何在不检查db的情况下在php中生成唯一的序列号或订单号?

4 个答案:

答案 0 :(得分:5)

uniqiduuid peclcom_create_guid()

中查看{{3}}或uuid_create

答案 1 :(得分:1)

如果您想保证唯一性,那么您必须检查某些内容。您可以使用平面文件并仅存储最近使用的数字(然后可以增加),但是不使用数据库是愚蠢的。您需要存储与该号码相关联的一堆其他信息(联系方式,订单包含的内容等),数据库是理想的。

答案 2 :(得分:1)

在mysql中使用自动增量列有几个问题(尤其是它不能扩展到等效节点)。

虽然你可以在几乎任何地方维护一个序列生成器(memcache,文件,数据库),但PHP并没有实现复杂的文件锁定语义 - 除了影响性能之外,你还可以快速进入交易锁定情境。它不能扩展到大容量。

如果你有PL / SQL可用,那么我建议在那里实现一个序列生成器 - 或者你可以考虑在PHP和sqlite中实现一个生成器。

我强烈建议您实施生成器以创建格式数:

$ use_number = ++ $ sequence_number。 str_pad($ node_id,'0',$ max_nodes,STR_PAD_LEFT);

其中node_id是唯一引用存储当前序列号的存储基板的编号。并且$ max_nodes有点多于$ node_id中找到的最大位数(例如3个节点允许最多999个节点)。

或者将其视为带有2个部分之间标点符号的字符串(和/或将2个部分存储在不同的数据库列中)。

下进行。

答案 3 :(得分:0)

如果您使用的是MySQL数据库,则可以生成序列号,而无需使用auto_increment列预先检查数据库。插入新行将导致为该列分配新的唯一ID,而无需在PHP中读取/写入该列。

或者,如果您想要一个甚至没有数据库的全局唯一ID,那么您可以使用PHP的uniqid()函数。请注意,这会返回一个字符串。如果您使用多台物理计算机或在服务器之间移动,则应在每台计算机上添加不同的前缀(第一个参数)。在同一台机器上使用时,此函数永远不应返回相同的字符串值两次。