gpt4 book ai didi

sql - 为表中的主键随机生成 1-999 之间的唯一数字

转载 作者:行者123 更新时间:2023-12-03 03:46:24 26 4
gpt4 key购买 nike

我有一个问题,不知道如何优雅地解决。

背景信息

我有一个小部件表。每个小部件都分配有一个数字范围内的 ID,假设在 1-999 之间。 1-999 的值作为“lower_range”和“upper_range”保存在我的数据库中名为“config”的表中。当用户请求使用我的网络应用程序创建新的小部件时,我需要能够执行以下操作:

  • 使用lua的math.random函数或者sqlite中的随机数生成器生成1到999之间的随机数(到目前为止,在我的测试中,lua的math.random总是返回相同的值......但这是一个不同的问题)
  • 执行一个 select 语句来查看是否已经有一个分配了该编号的小部件...
  • 如果没有,则创建新的小部件。
  • 否则重复该过程,直到获得当前未使用的号码。

问题

我发现上述逻辑的问题有两个:

  1. 该算法可能需要很长时间,因为我必须继续搜索,直到找到唯一值。
  2. 如何防止同时请求新的小部件编号生成相同的值?

如有任何建议,我们将不胜感激。谢谢

最佳答案

提前生成随机数并将其存储在表中;确保数字是唯一的。然后,当您需要获取下一个号码时,只需检查已经分配了多少个号码,然后从表中获取下一个号码。所以,而不是

  • 生成 1-999 之间的数字
  • 检查是否已分配
  • 生成新号码,依此类推。

这样做:

  • 生成 999 个元素的数组,其值以某种随机顺序从 1 到 999
  • 您的 GetNextId 函数变为返回 ids[currentMaxId+1]

要管理并发请求,您需要一些资源来生成正确的序列。最简单的方法可能是使用小部件表中的键作为 ids 数组中的索引。因此,首先向 widgets 表添加一条记录,获取其 key ,然后使用 ids[key] 生成小部件 ID。

关于sql - 为表中的主键随机生成 1-999 之间的唯一数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16447254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com