如何在不检查数据库的情况下在php中生成唯一的序列号或订单号?生成序列号或唯一订单号
回答
看到uniqid或uuid_create
在uuid pecl或com_create_guid()
如果你想保证唯一性,那么你必须检查一些东西。你可以使用一个平面文件并存储最近使用的数字(然后你可以增加),但是如果不使用数据库就很愚蠢。您需要存储链接到该号码的其他一些信息(联系详情,订单包含的内容等),并且数据库非常适合您。
如果您使用的是MySQL数据库,则可以生成序列号,而无需使用auto_increment列预先检查数据库。插入新行将导致将新的唯一ID分配给该列,而无需在PHP中读取/写入该列。
另外,如果你想要一个没有数据库的全局唯一ID,那么你可以使用PHP的uniqid()函数。请注意,这会返回一个字符串。如果您使用多台物理机器或在服务器之间移动,则应在每台机器上添加一个不同的前缀(第一个参数)。当在同一台机器上使用时,该函数不应该返回两次相同的字符串值。
可以mysql_return最后一个唯一的ID而不重新查询数据库? – Smith 2010-06-21 05:57:55
@Smith:http://php.net/manual/en/function.mysql-insert-id.php(但不知道它是否重新查询。) – Svish 2010-06-21 08:58:11
我怀疑mysql_insert_id是否创建了一个新的数据库查询,给定了描述(例如,它保留的时间少于MySQL的LAST_INSERT_ID())。但这是一个很好的问题。 – thomasrutter 2010-06-22 06:12:56
有在MySQL使用自动增量列的几个问题(至少不是事实,即它不能扩展到相当于节点)。
尽管您可以在任何地方维护序列生成器(memcache,files,database),但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个部分存储在不同的数据库列中)。
C.
- 1. 生成唯一订单号
- 2. 生成唯一序列号的java
- 3. 生成随机唯一序列号
- 4. 每天生成唯一的序列号
- 5. 如何生成唯一的订单号码?
- 6. 生成唯一编号
- 7. 生成一个序列号
- 8. 生产订单号码序列
- 9. 生成批量生产产品的唯一序列号
- 10. 唯一序列号到列
- 11. 在一天内为实体生成唯一序列号
- 12. 生成唯一的非序列号(与亚马逊相似)
- 13. 哪个是生成唯一序列号的最佳方法?
- 14. 如何在java中生成唯一的序列号?
- 15. 如何在SAP B1中生成唯一的ID /序列号?
- 16. 如何在laravel中生成唯一的序列号
- 17. 生成自定义订单号
- 18. Magento在保存前生成订单号
- 19. 如何生成序列号(注册号)?
- 20. Java EE中的唯一编号生成
- 21. 从种子生成的唯一编号
- 22. 唯一号码标识符生成
- 23. SQL生成序列号
- 24. XSLT序列号生成
- 25. Sql server生成序列号
- 26. LINQ生成序列号
- 27. 为每个英文单词生成唯一序列号的算法
- 28. 如果File.Exists&生成一个序列号
- 29. 生成序号
- 30. 在java中按顺序设置唯一订单号码?
如果我从日期字符串这样的日期(YmbHis),这将是唯一的产生,如果该网站被大量使用 – Smith 2010-06-21 05:52:26
^特别是如果你的服务器DST观察。我认为最好只检查数据库(或者按照托马斯的建议让它为您生成订单号)。这对数据库并不重要,即使是这样,你可能每分钟生成的订单数也不会超过几十个。 – 2010-06-21 06:39:48