SQL中的自动递增ID

发布于 2025-01-10 09:31:10 字数 306 浏览 0 评论 0原文

我想知道如何让我的 SQL 数据库表提供一个从 0 开始的 ID,并在每次添加新内容时检查是否有旧 ID 空闲。

示例: 我添加了 10 个项目,然后删除了几乎所有项目,并保留了 ID=5 的项目。 添加新项目后,它的 id 为 11 而不是 0。

注意:我正在使用 Laravel API 编辑我的数据库。 SQL DB截图

I want to know how can I make my SQL Database table give an ID starting from 0 and with every new add to check if there is an old ID free .

Exemple :
I added 10 items then I deleted almost everyone and I kept item with ID=5.
After adding a new item , it gets id 11 not 0.

Note : I'm editing my DB with Laravel API.
SQL DB Screenshot

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜巴黎 2025-01-17 09:31:10

SQL AUTO INCREMENT最大可增量列值加 1。

要填充空闲整数槽,您需要手动检查它,但这有点违背了自动递增的目的。

无论如何,这里是如何检查第一个空闲 ID 值:

function getUnusedId($ids_array)
{
  $max_id = max($used_ids); // can be 25 for example

  // [1:(id|1), 2:(id|2), 3:(id|3), 4:(id|5)] =>> ID 4 is missing
  for($i = 1; $i <= $max_id; $i++){
    if($used_ids[$i] > $i){
      return $i;
    }
  }
  return $max_id + 1; // You can echo that all IDs are used.
}

// The IDs must be ordered for this solution
$used_ids = Model::orderBy('id')->pluck('id')->toArray();

$free_id = getUnusedId($used_ids);

SQL AUTO INCREMENT adds 1 to the biggest incrementable column value.

To fill a free integer slot you need to check for it manually, but that kinda defeats the purpose of auto-incrementing.

Anyway here is how to check for the first free ID value:

function getUnusedId($ids_array)
{
  $max_id = max($used_ids); // can be 25 for example

  // [1:(id|1), 2:(id|2), 3:(id|3), 4:(id|5)] =>> ID 4 is missing
  for($i = 1; $i <= $max_id; $i++){
    if($used_ids[$i] > $i){
      return $i;
    }
  }
  return $max_id + 1; // You can echo that all IDs are used.
}

// The IDs must be ordered for this solution
$used_ids = Model::orderBy('id')->pluck('id')->toArray();

$free_id = getUnusedId($used_ids);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文