Php 生成序列号或唯一订单号
如何在php中生成唯一的序列号或订单号而不检查db?如果要保证唯一性,则必须检查某些内容。您可以使用平面文件,只存储最近使用的数字(然后可以递增),但不使用数据库是愚蠢的。您需要存储一系列与该号码相关的其他信息(联系方式、订单内容等),而数据库正是存储这些信息的理想选择。如果您使用的是MySQL数据库,您可以生成一个序列订单号,而无需使用列预先检查数据库。插入新行将导致为该列分配一个新的唯一ID,而无需在PHP中读/写该列Php 生成序列号或唯一订单号,php,auto-increment,serial-number,Php,Auto Increment,Serial Number,如何在php中生成唯一的序列号或订单号而不检查db?如果要保证唯一性,则必须检查某些内容。您可以使用平面文件,只存储最近使用的数字(然后可以递增),但不使用数据库是愚蠢的。您需要存储一系列与该号码相关的其他信息(联系方式、订单内容等),而数据库正是存储这些信息的理想选择。如果您使用的是MySQL数据库,您可以生成一个序列订单号,而无需使用列预先检查数据库。插入新行将导致为该列分配一个新的唯一ID,而无需在PHP中读/写该列 或者,如果您想要一个全局唯一的ID,甚至不需要数据库,那么您可以使用PH
或者,如果您想要一个全局唯一的ID,甚至不需要数据库,那么您可以使用PHP的()函数。请注意,这将返回一个字符串。如果使用多台物理计算机或在服务器之间移动,则应添加在每台计算机上都不同的前缀(第一个参数)。在同一台计算机上使用时,此函数不应两次返回相同的字符串值。请参阅或
uuid\u create
中的或在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个节点) 或者将其视为两部分之间带有标点符号的字符串(和/或将这两部分存储在不同的数据库列中)C.如果我从类似此日期(YmbHis)的日期字符串生成,那么如果站点被大量使用,它是否会是唯一的^。我认为最好只检查DB(或者让它按照Thomas的建议为您生成订单号)。它对数据库的影响不大,即使是这样,您也可能不会每分钟生成超过几十个订单号。mysql\u可以在不重新查询数据库的情况下返回最后一个唯一的id吗?@Smith:(但不确定它是否重新查询。)根据描述,我怀疑mysql\u insert\u id是否会创建一个新的DB查询(例如,它的保留时间比MySQL上一次的_INSERT_ID()要短),但这是一个好问题。