我正在尝试创建一个max num为999的序列,但是我面临的问题是当我创建例如5 Id时然后我删除了3rth,我的序列将创建id 6,是否有任何触发避免空Id的方法?
示例
我用过 1 2 3 4 5 我删除了3个 1 2 4 5
我插入一个 CURRENT 结果 1 2 4 5 6
我的目标是: 1 2 3 4 5
答案 0 :(得分:2)
如果您确实需要分配固定数量的资源(停车位,剧院座位,酒店房间等),您需要避免序列并为每个资源设置一个表格。
然后您使用
之类的内容分配资源#include <stdio.h>
#include <wchar.h>
#include <locale.h>
#include <stdlib.h>
#include <limits.h>
int main(int argc, const char *argv[])
{
setlocale(LC_ALL, ""); // my locale is UTF-8
wchar_t wc = 0xd834df01;
char bytes[MB_LEN_MAX] = {0};
int r = wctomb(bytes, wc);
if (r > 0) {
for (int i = 0; i < MB_LEN_MAX; i++)
printf("0x%x\n", bytes[i]);
} else {
perror("fail");
}
return 0;
}
您需要添加错误处理,以满足您没有更多可用资源的情况。在处理少量固定数量的资源时,还存在(几乎不可避免的)并发问题。
答案 1 :(得分:0)
您永远不应重复使用ID。没理由这样做,只有麻烦。 你可以找到第一个可用的ID,包括像这样的空白,如果真的,真的需要它。但这是错误的编程实践。您的身份证可能也有现实意义,在这种情况下,您不应将其称为身份证。
select min(t1.id+1) as gap_id
from table t1
left join thesametable t2 on t2.id=t1.id+1
where t2.id is null