SQL 中的自动递增 ID
Auto Increment ID in SQL
我想知道如何让我的 SQL 数据库 table 提供一个从 0 开始的 ID,并在每次添加新 ID 时检查是否有旧 ID 可用。
例子:
我添加了 10 个项目,然后几乎删除了所有项目,并保留了 ID = 5 的项目。
添加新项目后,它获得 id 11 而不是 0。
注意:我正在使用 Laravel API 编辑我的数据库。
SQL AUTO INCREMENT 将 最大可递增列值加 1 .
要填充一个空闲的整数槽,您需要手动检查它,但这有点违背 auto-incrementing 的目的。
无论如何,这是检查第一个免费 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 数据库 table 提供一个从 0 开始的 ID,并在每次添加新 ID 时检查是否有旧 ID 可用。
例子: 我添加了 10 个项目,然后几乎删除了所有项目,并保留了 ID = 5 的项目。 添加新项目后,它获得 id 11 而不是 0。
注意:我正在使用 Laravel API 编辑我的数据库。
SQL AUTO INCREMENT 将 最大可递增列值加 1 .
要填充一个空闲的整数槽,您需要手动检查它,但这有点违背 auto-incrementing 的目的。
无论如何,这是检查第一个免费 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);